在 javascript 严格模式下,某些赋值会默默失败(Chrome)

问题描述 投票:0回答:1

MDN 中的严格模式定义如下

在正常代码中任何默默失败的分配(分配给 不可写属性,分配给仅吸气剂属性, 分配给不可扩展对象上的新属性)将抛出 严格模式

因此,在正常代码中默默失败的文档分配会在严格模式下引发异常(如预期)。

> var document = 1

// normal mode
> document
  #document

// strict mode
x Uncaught TypeError: Cannot assign to read only property 'document' of object [object Object]

但是对于

window
的情况,严格模式下不会出错。它只是默默地失败了。

> var window = 1
> window
  Window {external: Object, chrome: Object, document: document…}

另一种情况是

console
可以重新分配而不会出现任何错误并保留分配。

> var console = 1
> console
  1

但是

localStorage
既不保留赋值也不抛出异常。

> var localStorage = 1
> localStorage
  Storage {}

为什么即使在严格模式下,window 和 localStorage 也会默默地失败?还有哪些人有这样的行为?

(Chrome 48.0.2564.116)

javascript google-chrome
1个回答
0
投票

window
localStorage
主机对象

由于宿主对象是由宿主环境定义的,因此它们经常会产生意想不到的结果。在 Internet Explorer 中尤其如此,但在现代浏览器的边缘情况下仍然如此。

© www.soinside.com 2019 - 2024. All rights reserved.