为什么不为undefined分配值会在现代浏览器中产生错误?

时间:2016-09-12 13:55:13

标签: javascript

例如,想象以下表达式:

undefined = "whatever";

undefined的值不会因此而改变,但它也不会产生任何错误或异常,无论是在Firefox,Chrome,Edge还是IE11中。

实际上,表达式的值甚至是指定的值而不是undefined

var x = (undefined = "whatever");

现在x包含值"whatever"

另一方面,这似乎很奇怪,但更糟糕的是,另一方面,因为没有人应该尝试重新定义undefined,所以错误的来源,并且导致这样做的拼写错误应该被引擎捕获。为什么那会飞?

与尝试重新定义其他关键字时的行为相比,代表示例:

for = 12345;

这正确地产生了"Uncaught SyntaxError: Unexpected token ="

2 个答案:

答案 0 :(得分:1)

因为js必须向后兼容,并且在某个时候它是以这种方式引入的。为了解决这个问题,引入了严格模式。使用严格模式undefined = "whatever"会引发错误。

答案 1 :(得分:1)

MDN阅读:

  

虽然可以在全局范围以外的任何范围内将其用作标识符(变量名)(因为undefined不是保留字),但这样做是一个非常糟糕的想法,会使您的代码难以维护和调试。



(function () {
  var undefined = 'foo';
  console.log(undefined, typeof undefined);
})();