按字面意思,通俗地说,以赋值符号=为界,=左边的就是左值,=右边就是右值。更深一层,可以将L-value的L,理解成Location,表示定位、地址。将R-value的R理解成 Read,表示读取数据。现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。变量名编译之后,会映射成内存地址。操作a=b的含义,其实就是将"b地址内存里面的数据",放到"a地址内存"中。
可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。简单来说就是,左值相当于地址值,右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。
```
1 = 2; // Uncaught ReferenceError: Invalid left-hand side in assignment
const a; // Uncaught SyntaxError: Missing initializer in const declaration
const b = 1;
b = 2; // Uncaught TypeError: Assignment to constant variable
```
网友评论