文字和价值观是一回事吗?

van*_*353 5 javascript

我的理解是变量指向值,虽然可以将同一个变量重新分配给多个值,但值本身是不可变的.在学习JavaScript时,"文字"的概念似乎经常出现,但我没有找到区分文字价值观的明确解释.事实上,一位作者将它们等同起来.

你如何将文字与价值观进行比较?请提供简单的例子.

对于任何有兴趣的人,我发现这个解释非常有用.我现在看到它的方式,文字总是在评估后产生自己,而值可能更复杂(例如表达式),并且可以评估为不同于自己的东西.

Ian*_*nry 5

文字是价值的表征.但价值观不是文字.

例如,数字文字可以是45.这是一个四个字符后跟一个五个字符.但是当JavaScript解释器看到这个时,它知道将它变成一个数值 - 一个Number表示浮点数的JS 0x4046800000000000(根据我在网上找到的一些十进制到IEEE754二进制转换器).

字符串文字是"something like this"(一些字符用引号括起来).数组文字是[something, like, this](用方括号括起来的逗号分隔表达式).

"文字"是句法概念.它们是识别JS解释器的值的方法.您可以使用相同的数组new Array(something, like, this),但这不是文字,因为它不使用文字语法.

对象文字:{foo: bar}.打电话truefalse"布尔文字" 是完全有效的,但我不认为我曾经听过有人说过这个.


以上是您问题的答案.下面的一些支持信息可能会让您的学习过程变得不那么痛苦:

我的理解是变量指向值,虽然可以将同一个变量重新分配给多个值,但值本身是不可变的.

"指向"是一个重要的术语,在编程时具有精确的含义,但这在JavaScript中并不常见(因为您没有明确的指针).

JavaScript中有可变和不可变的值.例如,字符串是不可变的.数字也是如此.你不能改变字符串"foo".如果我说

var x = "foo";
var y = x;
Run Code Online (Sandbox Code Playgroud)

我无能为力,x这将改变其价值y.虽然在内部我们知道这不是正在发生的事情,但我们可以假装当我们分配一个不可变类型(如字符串或数字)时,它每次都会复制该值(实际上并不是这样,因为这样效率很低,但在语义上它看起来与我们相同).

然而:

var x = [1, 2, 3];
var y = x;
Run Code Online (Sandbox Code Playgroud)

现在,这两个xy代表可变值,我们可以改变:

x.push(4);
console.log(y); // [1, 2, 3, 4]
y.push(5);
console.log(x); // [1, 2, 3, 4, 5] 
Run Code Online (Sandbox Code Playgroud)

这两个xy是同一阵列的名称,以及是否我们正在试图改变x或者y,我们实际上改变的是相同的底层数组.你可以说变量xy"指向"相同的数组,或"保持对相同数组的引用",或者其他什么,你基本上都在说同样的事情.

数字和字符串之类的东西不能改变,所以我们不必担心这种区别.但是数组和对象是可变的,所以我们这样做.变量是否存储指向数字或字符串的指针,或者实际存储数字或字符串本身与程序员无关,因为它表现得好像它们存储整个值的副本(但JS引擎内部将会这样做)无论它认为哪个更快).


Jan*_*nen 2

字面量的含义只是一个常量值,例如1、 或true

变量与文字相反;变量的值可以改变,而文字的值则不能。