成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

節前,沒了靈魂的伙,在學習值和引用之間的區別

開發 前端
在JavaScript中,可以通過值和引用傳遞。兩者之間的主要區別是,按值傳遞發生在賦值基本類型的時候,而賦值對象時按引用傳遞。接下來,跟著智哥,來詳細看看。

[[392719]]

在JavaScript中,可以通過值和引用傳遞。兩者之間的主要區別是,按值傳遞發生在賦值基本類型的時候,而賦值對象時按引用傳遞。接下來,跟著智哥,來詳細看看。

1.理解基本類型和對象

JavaScript提供了2種數據類型:基本類型和對象

基本類型有 number, boolean, string, symbol,null,undefined。

  1. // 基本類型 
  2. const number = 10; 
  3.  
  4. const bool = false
  5.  
  6. const str = 'Hello!'
  7.  
  8. const missingObject = null
  9.  
  10. const nothing = undefined; 

第二類是對象,普通對象、數組、函數等等都是對象。

  1. // Objects 
  2. const plainObject = { 
  3.   prop: 'Value' 
  4. }; 
  5.  
  6. const array = [1, 5, 6]; 
  7.  
  8. const functionObject = (n1, n2) => { 
  9.   return n1 + n2; 
  10. }; 

換句話說,任何不是基本類型的值都是對象。

2.值

按值傳遞的簡單規則是 JS 中的所有基本類型都按值傳遞,就這么簡單。

按值傳遞意味著每次將值賦給變量時,都會創建該值的副本,每一次哦。

舉個例子來看看,假設我們有兩個變量 a 和 b:

  1. let a = 1; 
  2. let b = a; 
  3.  
  4. b = b + 2; 
  5.  
  6. console.log(a); // 1 
  7. console.log(b); // 3 

第一條語句,聲明一個變量 a,并賦值為 1。

第二條語句,聲明一個變量 b,并把 a 的值賦值給它。

最后,b = b + 2增加2并變為3。b變量發生變化,并且該變化不會影響a的值。

3.引用

通過引用傳遞的方式與值傳遞相比會有所不同。

當創建一個對象時,就獲取一個對該對象的引用。如果兩個變量持有相同的引用,那么改變對象會反映在兩個變量中。

請看下面代碼:

  1. let y = x; 
  2.  
  3. y.push(2); 
  4.  
  5. console.log(x); // [1, 2] 
  6. console.log(y); // [1, 2] 

第一個語句let x =[1]創建一個數組,定義一個變量x,并使用對創建的數組的引用來初始化變量。

然后let y = x定義一個變量y,并使用存儲在x變量中的引用來初始化y,這是一個引用傳遞。

y通過y.push(2)通來改變數組。因為x和y變量引用相同的數組,所以這種變化會反映在兩個變量中。

注意:為簡單起見,我說變量包含對對象的引用。但是嚴格說來,JavaScript中的變量包含的值是對對象的引用。

4.值的比較和引用的比較

在比較對象時,理解值和引用之間的區別非常重要。

當使用嚴格比較運算符===時,如果兩個變量的值相同,則它們相等。以下所有比較均相等

  1. const one = 1; 
  2. const oneCopy = 1; 
  3.  
  4. console.log(one === oneCopy); // true 
  5. console.log(one === 1);       // true 
  6. console.log(one === one);     // true 

one和oneCopy具有相同的值1。當兩個操作數都為1時,操作符===的計算結果都為true。

但是比較運算符===在比較引用時的工作方式有所不同。2個引用只有在引用完全相同的對象時才相等。

ar1和ar2保存對不同數組實例的引用:

  1. const ar1 = [1]; 
  2. const ar2 = [1]; 
  3.  
  4. console.log(ar1 === ar2); // false 
  5. console.log(ar1 === [1]);  // false 
  6.  
  7. const ar11 = ar1; 
  8. console.log(ar1 === ar11); // true 
  9. console.log(ar1 === ar1);  // true 

ar1和ar2引用結構相同的數組,但是ar1 === ar2的計算結果為false,因為ar1和ar2引用了不同的數組對象。

僅當比較指向相同對象的引用時,比較運算符才返回true:ar1 === ar11或ar1 === ar1。

5.總結

在JavaScript中,原始類型作為值傳遞:意味著每次分配值時,都會創建該值的副本。

另一方面,對象(包括普通對象,數組,函數,類實例)是引用。如果修改對象,則引用該對象的所有變量都將看到更改。

比較運算符區分比較值和參考。僅當引用完全相同的對象時,2個保存引用的變量才相等,但是,無論值源自何處,只要變量具有相同的2個值(分別來自變量,文字等),則2個保存值的變量就相等。

~ 完,我是刷碗智,我們下期見!

作者:Ahmad shaded 譯者:前端小智 來源:sitepoint原文:https://dmitripavlutin.com/value-vs-reference-javascript/

 

責任編輯:姜華 來源: 大遷世界
相關推薦

2022-09-19 15:57:36

JVM對象緩存

2021-01-29 15:10:32

機器學習

2021-12-01 22:55:45

人工智能機器學習深度學習

2017-03-01 21:15:44

AI機器學習深度學習

2019-08-26 00:30:48

2021-02-14 10:06:54

RPAAICIO

2020-06-09 07:00:00

RHELCentOSFedora

2023-04-19 10:17:35

機器學習深度學習

2010-02-03 09:52:52

C++指針與引用

2017-03-20 19:18:00

Android符號引用

2017-12-04 14:32:36

深度學習機器學習

2021-02-25 10:07:42

人工智能AI機器學習

2009-01-19 13:35:57

ETLEAI數據倉庫

2023-03-29 08:35:11

RMANBackupSets

2011-03-17 15:48:32

jQuery

2023-05-11 07:41:03

Java 8tMap方法

2022-09-14 11:17:13

云計算邊緣計算

2021-01-22 10:27:28

人工智能機器學習技術

2017-03-07 15:43:28

編程語言函數數據結構

2022-07-14 16:35:11

C語言編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区av| 日韩中文在线 | 国产精品美女久久久久aⅴ国产馆 | 成人激情视频在线 | 欧美日韩在线成人 | 久久久69| 免费在线视频a | 精品亚洲一区二区三区 | 草草视频在线观看 | 在线国产一区二区 | 国产在线一区二区三区 | 国产亚洲网站 | 欧美日韩中文字幕在线播放 | 成人亚洲视频 | 亚洲高清在线观看 | 久久er精品 | 一级日韩 | 国产在线高清 | 久久久免费电影 | 欧美 日韩 视频 | 日日拍夜夜 | 成人做爰999 | 你懂的在线视频播放 | 懂色av蜜桃av | 亚洲免费av一区 | 国产精品日产欧美久久久久 | 国产一区视频在线 | 日韩欧美二区 | 免费久久网| 久久久精品一区二区三区 | 超碰在线播 | 伊人一区 | 午夜专区 | 欧美日韩国产一区二区 | 日韩人体在线 | 久久久亚洲精品视频 | 97人人超碰 | 欧美日在线 | 在线免费av观看 | 欧美视频一区二区三区 | 91精品一区二区三区久久久久久 |