JavaScript 原始值與引用值

JavaScript 原始值與引用值

ECMAScript變量可以包含兩種不同類型的數據:原始值和引用值。

原始值(primitive value)就是最簡單的數據,引用值(reference value)則是由多個值構成的對象。

保存原始值的變量是按值(by value)訪問的,因為我們操作的就是存儲在變量中的實際值。

引用值是保存在內存中的對象。與其他語言不同,JavaScript不允許直接訪問內存位置,因此也就不能直接操作對象所在的內存空間。在操作對象時,實際上操作的是對該對象的引用(reference)而非實際的對象本身。為此,保存引用值的變量是按引用(by reference)訪問的。

1)動態屬性

只有引用值可以動態添加后面可以使用的屬性。

2)復制值

原始值和引用值在通過變量復制時有所不同。

在通過變量把一個原始值賦值到另一個變量時,原始值會被復制到新變量的位置。

let num1 = 5;
let num2 = num1;

這里,num1包含數值5。當把num2初始化為num1時,num2也會得到數值5。這個值跟存儲在num1中的5是完全獨立的,因為它是那個值的副本。

這兩個變量可以獨立使用,互不干擾。

在把引用值從一個變量賦給另一個變量時,存儲在變量中的值也會被復制到新變量所在的位置。區別在于,這里復制的值實際上是一個指針,它指向存儲在堆內存中的對象。操作完成后,兩個變量實際上指向同一個對象,因此一個對象上面的變化會在另一個對象上反映出來。

3)傳遞參數

ECMAScript中所有函數的參數都是按值傳遞的。這意味著函數外的值會被復制到函數內部的參數中,就像從一個變量復制到另一個變量一樣。

如果是原始值,那么就跟原始值變量的復制一樣,如果是引用值,那么就跟引用值變量的復制一樣。

在按值傳遞參數時,值會被復制到一個局部變量(即一個命名參數,或者用ECMAScript的話說,就是arguments對象中的一個槽位)。

注意 ECMAScript中函數的參數就是局部變量。

4)確定類型

typeof操作符最適合用來判斷一個變量是否為原始類型。更確切地說,它是判斷一個變量是否為字符串、數值、布爾值或undefined的最好方式。如果值是對象或null,那么typeof返回"object"。

typeof雖然對原始值很有用,但它對引用值的用處不大。我們通常不關心一個值是不是對象,而是想知道它是什么類型的對象。為了解決這個問題,ECMAScript提供了instanceof操作符,語法如下:

result= variable instanceof constructor

如果變量是給定引用類型(由其原型鏈決定)的實例,則instanceof操作符返回true。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91777.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux中掛載磁盤和卸載

查找磁盤 找到你想要掛載的磁盤。可以使用lsblk或fdisk -l命令來查看系統中所有的磁盤和分區信息。 lsblk 對數據盤進行分區 在fdisk交互界面里,按以下步驟操作 fdisk /dev/vdb- 輸入n來創建新分區。 - 按照提示設置分區的起始扇區、結束扇區等信息,…

java8學習筆記-Stream流

JDK1.8新增了Stream類,從而把函數式編程的風格引入到Java語言中,Stream類的API提供了強大的功能,使用Stream后,可以寫出更加強大,更加簡潔的代碼首先,Stream流有一些特性:Stream流不是一種數據結…

Flutter開發 dart語言基本語法

特點 Dart語言支持JIT與AOT。 Dart語言采用單線程模型。 Dart語言是強類型編程語言,但是允許弱類型語言式編程。 基本語法 1.變量和常量 變量 var、object、dynamic關鍵字或數據類型顯式聲明變量。 命名規則: 變量名稱必須由數字、字母、下劃線或$組成&a…

SpringBoot:基于 Redis 自定義注解實現后端接口防重復提交校驗(冪等操作)

SpringBoot:基于 Redis 自定義注解實現后端接口防重復提交校驗(冪等操作)可基于 時間間隔 和 用于冪等判斷的參數名稱 實現防重復提交校驗 客戶端發送請求 ↓ [Spring Boot 應用入口]↓ ┌─────────────────────────…

【語音技術】意圖與語料

目錄 1. 意圖 1.1. 意圖分類 1.1.1 入口意圖(Entry Intent) 1.1.2 對話意圖(Dialog Intent) 1.2. 意圖類型切換操作步驟 2. 語料 2.1 語料分類詳解 2.2 語料編寫規范詳解 2.3 標簽符號深度說明 3. 詞槽 3.1 符類型要求 …

【MySQL集群架構與實踐5】使用Docker實現水平分片

目錄 一. 在Docker中安裝ShardingSphere 二. 實踐:水平分片 2.1 應用場景 2.2 架構圖 2.3 服務器規劃 2.4 創建server-user容器 2.5 創建server-order0和server-order1容器 2.6.日志配置 2.7 數據節點配置 2.8.測試數據節點 2.8.1.測試server_order0.t_or…

視覺圖像處理中級篇 [1]—— 彩色照相機的效果與預處理

在工業檢測中,黑白相機雖應用廣泛,但在應對顏色差異檢測時往往力不從心。彩色照相機憑借其對色彩信息的精準捕捉,成為復雜場景下的理想選擇,而預處理技術則進一步釋放了其性能潛力。一、彩色照相機的效果檢查蓋子上的金色標簽可以…

使用 BERT 的 NSP 實現語義感知切片 —— 提升 RAG 系統的檢索質量

在構建 Retrieval-Augmented Generation(RAG)系統時,文檔的切片方式至關重要。我們需要將長文本切分成合適的段落(chunks),然后存入向量數據庫進行召回。如果切得太粗,會丟失上下文細節&#xf…

使用STM32CubeMX生成的STM32CubeIDE工程在更改工程名后編譯失敗問題解決

0 問題描述 使用STM32CubeMX生成STM32CubeIDE工程,然后使用STM32CubeIDE改名后編譯提示如下錯誤: 1 問題原因及解決辦法 1.1 問題原因 原因在于更名后STM32CubeIDE沒有自動更新引用關系,這是因為我們使用STM32CubeMX生成代碼時沒有勾選在根目錄下生成: 取消勾選在根目…

8月3日星期日今日早報簡報微語報早讀

8月3日星期日,農歷閏六月初十,早報#微語早讀。1、廣西防城港:奔馳女司機身份已查清,結果將統一對外發布;2、陳藝文、陳佳包攬游泳世錦賽女子跳水三米板金銀牌;3、九省份保險業已賠付暴雨災害損失5.2億元&am…

wxPython 實踐(六)對話框

wxPython 實踐(一)概述 wxPython 實踐(二)基礎控件 wxPython 實踐(三)頁面布局 wxPython 實踐(四)事件響應 wxPython 實踐(五)高級控件 wxPython 實踐&#x…

MATLAB科研數據可視化技術

互聯網的飛速發展伴隨著海量信息的產生,而海量信息的背后對應的則是海量數據。如何從這些海量數據中獲取有價值的信息來供人們學習和工作使用,這就不得不用到大數據挖掘和分析技術。數據可視化分析作為大數據技術的核心一環,其重要性不言而喻…

文明存續的時間博弈:論地球資源枯竭臨界期的技術突圍與行動緊迫性

摘要當地球資源消耗以指數級速度逼近生態承載力極限,人類文明正面臨“存續還是消亡”的終極抉擇。本文基于地球資源枯竭的實證數據與技術突破的可行性分析,揭示文明存續的時間窗口已進入不可逆臨界期(2040-2070年),論證…

Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能與存儲改進

作者:來自 Elastic Martijn Van Groningen 探索 TSDS 和 LogsDB 的最新增強功能,包括優化 I/O、提升合并性能等。 Elasticsearch 帶來了許多新功能,幫助你為你的使用場景構建最佳搜索解決方案。通過我們的示例筆記本深入學習,開始…

cs336之注意pytorch的tensor在哪里?(assert的使用)

問題 記住:無論何時你在pytorch中有一個張量tensor,你應該始終問一個問題:它當前位于哪里? 注意它在CPU還是在GPU中。要判斷它在哪里,可以使用python的assert斷言語句。 assert斷言 在 Python 中,assert 是…

Mysql 分區表

分區表是將一張表分成多張獨立子表,每個子表是一個區,目的是提高查詢效率。 從 server 層來看,只有一張表。但是從引擎層來看,是多張表,對應多個.idb文件。引擎層訪問數據只訪問特定分區表,也只對特定分區表…

Makefile 入門與實踐指南

Makefile 是用于 make 工具的配置文件,它定義了如何編譯和鏈接你的項目,讓構建過程自動化。一、核心概念 make 的核心思想是 “目標”(Target) 和 “依賴”(Dependencies): 目標 (Target)&#…

分布式微服務--Nacos作為配置中心(補)關于bosststrap.yml與@RefreshScope

一、關于bosststrap.yml? bootstrap.yml 和 application.yml 的區別對比項bootstrap.ymlapplication.yml加載時機優先于 application.yml 加載(啟動早期)程序初始化完成后加載主要用途設置應用的外部配置源、注冊中心信息等設置應用內部配置&#xff0c…

[Qt]QString 與Sqlite3 字符串互動[漢字不亂碼]

環境:Qt C(msvc c)1.將與數據庫交互的代碼文件編碼轉換為utf-8-bom編碼,(可使用notepad 進行轉換)2.在代碼文件頭文件中加上下面代碼。//vs2010 版本是 1600 #if defined(_MSC_VER) && (_MSC_VER &…

SpringBoot啟動項目詳解

SpringBoot 的啟動過程是一個整合 Spring 核心容器、自動配置、嵌入式服務器等功能的復雜流程,核心目標是 “簡化配置、快速啟動”。下面從入口類開始,逐步拆解其詳細啟動步驟:一、啟動入口:SpringBootApplication與main方法Sprin…