为什么浏览器在严格模式下允许一些全局变量?

时间:2016-08-02 15:20:45

标签: javascript global-variables multiple-browsers strict-mode

我无法弄明白,为什么有些浏览器允许下一个代码,而其他浏览器则不允许:

'use strict';
(function() {
  Number = 1;
  toString = 1;
  valueOf = 1;
})();
console.log(Number);
console.log(toString);
console.log(valueOf);
  • Windows上的Chrome 52会引发toString和valueOf,但允许使用Number。
  • Linux上的Chrome 49会抛出valueOf,并允许其他人。
  • Firefox 47允许所有。
  • IE 11允许编号。
  • Opera允许编号。

起初,当我在Chrome中发现这一点时,我想,这是因为这些"变量"已经被定义为全局对象的属性。但window.hasOwnProperty('toString')返回false,以及' valueOf'。所以我不知道。

有人可以解释一下吗?

我问,因为我需要在单元测试中测试,全局变量没有被修改,这种行为使得它很难,因为我不知道什么行为是正确的,所以我可以依赖它并没有找到它被修复的一天。

0 个答案:

没有答案