我在javascript中编写了一些代码。当我偶然遇到这个时。
undefined = 'some value' //does not give any error
true = 'some value'; //gives error
null = 'some value'; //gives error
第一个语句如何有效,而另外两个语句无效。据我所知,undefined,true和null都是可以赋值给某个变量的值,因此所有这些都应该是无效的语句。
答案 0 :(得分:5)
来自MDN:
undefined
是全局对象的属性;即,它是一个变量 在全球范围内。undefined
的初始值是原始值undefined
。
因此,您可以将值分配给undefined
,而不是保留关键字的true
和null
。请注意,这与NaN
的情况相同,也不是保留关键字,因此,您可以为其分配任何值。
只是为此添加更多内容,即使您为undefined
分配值也没关系,它不会写入它,因为它是一个只读属性。
再次从MDN引用。
在现代浏览器(JavaScript 1.8.5 / Firefox 4+)中,undefined是一个 ECMAScript 5的不可配置,不可写属性 规格。即使不是这种情况,也要避免覆盖它。
首选在JavaScript中使用严格模式,在文件的最顶部或函数内部声明"use strict"
以避免此类事情。使用像
"use strict";
undefined = 'test'; //will raise an error, refer to [1]
[1] VM1082:2未捕获的TypeError:无法分配给读取 只有属性'undefined'的对象'#'
答案 1 :(得分:3)
这是因为 undefined不是JavaScript中的保留字,即使它具有特殊含义。因此可以为其分配值,整个语句有效。 true
和null
是保留字,无法分配值。
答案 2 :(得分:0)
您无法使用任何语言声明带有保留字(关键字)名称的变量,无论是脚本编程还是编程。
如果你想使用它,你可以在varibale名称的第一个使用_
下划线。
喜欢:_true,_null或_anythingwhatyouwant
答案 3 :(得分:0)
我直接引用了MD Js文档。
虽然可以将其用作任何标识符(变量名称) 范围不是全局范围(因为undefined不是保留的 这样做是一个非常糟糕的想法,会使你的代码变得困难 维护和调试。
//DON'T DO THIS
// logs "foo string"
(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();
// logs "foo string"
(function(undefined) { console.log(undefined, typeof undefined); })('foo');
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/undefined