JavaScript 左值與右值
程式設計中,很多概念雖然編寫者已經在使用,但自己並沒有意識到。
生活中也有很多類似的例子,比如著名的蘋果落地現象。
很少人去思考原因,因為大家會覺得這是理所當然的事情。
學過相關物理知識之後,才知道是萬有引力原因導致。
下面進入本文的主題,首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼num=5;
上面程式碼實在是太簡單了,為變數num賦值為5。
這其中就涉及到左值(L-value)與右值(R-value)概念的應用,即便不知道不影響程式碼的使用。
但是多一點的知識儲備,會讓人更加通透一點。
一.左值與右值概念理解:
左值與右值是以等號隔開,從外觀可以理解如下:
(1).在等號左邊為左值。
(2).在等號右邊為右值。
但是上述理解過於膚淺,下面做一下深入介紹。房子具有兩個重要屬性:
(1).房子地址。
(2).房子中住的人。
計算機記憶體與房子類似,它也具有兩個類似屬性:
(1).記憶體地址。
(2).記憶體中的資料。
那麼左值側重於地址,而右值側重於值。
於是L-value中的L理解為location,R-value中的R理解為read更為合適。
二.程式碼例項分析:
[JavaScript] 純文字檢視 複製程式碼num=5;
將數字5儲存到num所指向的記憶體中。
[JavaScript] 純文字檢視 複製程式碼b=a;
左值側重地址,右值側重資料。
那麼就是將a地址中的資料儲存到b地址記憶體中。
[JavaScript] 純文字檢視 複製程式碼5=b;
上述程式碼會報錯,這是因為5是一個數字直接量,無法從中獲取地址。
所以無法將b地址記憶體中的資料賦值給一個無地址的東西。
最後總結:
(1).左值是接收資料的地方,所以側重於地址。
(2).右值是讀取資料賦值給另一個地址記憶體,所以它側重資料。
雖然對於左值或者右值理解與否大多數情況下不會對程式設計產生影響,但是對於它的掌握,能夠讓我們透過現象看透本質,加深對程式碼的理解,也許它是其他概念中的一環,所以多掌握一個知識點,可能就相當於多了一條到達目的地的路。
相關文章
- C筆記-左值與右值筆記
- 左值、右值、左值引用,右值引用,std::move函式函式
- C++左值引用與右值引用C++
- c++ 左值引用與右值引用C++
- c++中的左值與右值C++
- C++ 左值和右值C++
- 左值右值的一點總結
- C++ 右值引用和左值引用C++
- C++霧中風景10:聊聊左值,純右值與將亡值C++
- C++11 左值引用和右值引用與引用摺疊和完美轉發C++
- C++ 左值引用和右值引用之間的轉換C++
- C++左值右值完美轉發轉移C++
- 右值引用
- 陣列左邊減去右邊數值的最大差值陣列
- C++右值引用C++
- 左連線與右連線
- c++11之左值引用和右值引用C++
- 左側固定,右側自適應的佈局方式理解margin負值理論
- C++11/14::右值引用C++
- JavaScript 之物件拷貝與賦值JavaScript物件賦值
- C++ 11 中的右值引用C++
- C++11中的右值引用C++
- C++11 中的右值引用與轉移語義C++
- JavaScript - 基本型別與引用型別值JavaScript型別
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- 左連線,右連線
- 左兒子和右兄弟
- JavaScript 陣列最大值和最小值JavaScript陣列
- JavaScript 陣列 最大值和最小值JavaScript陣列
- JavaScript陣列最大值和最小值JavaScript陣列
- 二分查詢的左閉右開和左閉右閉寫法
- 左值有地址,為社麼還要std::move()?
- JavaScript 連等賦值JavaScript賦值
- javascript原始值和引用值型別及區別JavaScript型別
- “閥值”與“閾值”的區別
- C++中“非常量引用的初始值必須是左值”的處理方法C++
- Oracle左連線,右連線Oracle
- 左連線和右連線