例如,想象以下表达式:
undefined = "whatever";
undefined
的值不会因此而改变,但它也不会产生任何错误或异常,无论是在Firefox,Chrome,Edge还是IE11中。
实际上,表达式的值甚至是指定的值而不是undefined
:
var x = (undefined = "whatever");
现在x
包含值"whatever"
。
另一方面,这似乎很奇怪,但更糟糕的是,另一方面,因为没有人应该尝试重新定义undefined
,所以错误的来源,并且导致这样做的拼写错误应该被引擎捕获。为什么那会飞?
与尝试重新定义其他关键字时的行为相比,代表示例:
for = 12345;
这正确地产生了"Uncaught SyntaxError: Unexpected token ="
。
答案 0 :(得分:1)
因为js必须向后兼容,并且在某个时候它是以这种方式引入的。为了解决这个问题,引入了严格模式。使用严格模式undefined = "whatever"
会引发错误。
答案 1 :(得分:1)
从MDN阅读:
虽然可以在全局范围以外的任何范围内将其用作标识符(变量名)(因为undefined不是保留字),但这样做是一个非常糟糕的想法,会使您的代码难以维护和调试。
(function () {
var undefined = 'foo';
console.log(undefined, typeof undefined);
})();