我想不通,为什么有些浏览器允许下一个代码,而有些则不允许:
'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' 也是如此。所以我不知道。
请问有人能解释一下吗?
我问是因为我需要在单元测试中进行测试,全局变量没有被修改,这种行为很难,因为我不知道什么行为是正确的,所以我可以依赖它而不是有一天找到它是固定的。