我正在阅读JavaScript:权威指南。
在3.4节中,
在ECMAScript 3中,未定义是读/写变量,可以设置它 任何价值。此错误已在ECMAScript 5中更正,并且未定义为 以该语言的版本为只读。
读/写变量到底是什么意思?
答案 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”,这没有任何意义。