JavaScript中的“读/写变量”是什么意思?

时间:2018-06-21 12:15:27

标签: javascript ecmascript-5

我正在阅读JavaScript:权威指南。

在3.4节中,

  

在ECMAScript 3中,未定义是读/写变量,可以设置它   任何价值。此错误已在ECMAScript 5中更正,并且未定义为   以该语言的版本为只读。

读/写变量到底是什么意思?

2 个答案:

答案 0 :(得分:2)

如果某项是“读/写”,则意味着您既可以读取也可以对其进行写入。与只读变量(无法写入)或只读变量(无法从中读取;相当不寻常,但完全有可能)形成对比。

在JavaScript中,默认情况下会读取/写入变量。实际上,直到ES2015,所有真实变量都是读/写的。在ES2018中,我们获得了const,可让您创建一个只读的“变量”(“常量”),但它仍然是一个“变量”(规范称为 binding )的其他方式。

但是通过创建全局对象的只读 property ,甚至可以并且有可能在const之前创建只读全局“变量”:

// A global scope, this refers to the global object
Object.defineProperty(this, "answer", {
  value: 42,
  writable: false // this is the default, including it here for emphasis
});
console.log("answer = ", answer); // 42
answer = 67; // Would be an error in strict mode
console.log("answer = ", answer); // still 42

之所以可行,是因为可以将全局对象的属性作为全局变量进行访问。

答案 1 :(得分:1)

读/写变量是指一个变量,您可以为其分配一些值,以后再读取该变量,例如

var x = 10; writing to it
console.log(x) //prints 10  -- reading from it

在ECMAScript 3中,“未定义”是一个读/写变量,即您可以执行undefined =“ foo”,这没有任何意义。