是否可以在Javascript中更改或删除全局对象的属性?

时间:2014-11-29 19:03:52

标签: javascript global

我只是阅读有关全局对象的内容,并想知道是否可以更改全局对象属性的值。我不知道这会起什么作用,但我很感兴趣。

以此代码为例:

Infinity = 4;           //Alter the property Infinity of the global object
                        //This doesn't prompt an error...
console.log(Infinity);  //Yet, for some reason it still prints Infinity, instead of 4.

你能否这样做:

delete Infinity;
console.log(Infinity)

似乎这是不可能的,因为Infinity仍会打印Infinity,而不是提示未定义的错误。

2 个答案:

答案 0 :(得分:2)

这取决于 - 属性是否可写/可配置?

Infinity既不是以下控制台日志所公开的:

> Object.getOwnPropertyDescriptor(window,'Infinity')
< Object {value: Infinity, writable: false, enumerable: false, configurable: false}

但是,其他全局属性(例如frames)是可配置的:

> Object.getOwnPropertyDescriptor(window,'frames')
< Object {value: Window, writable: true, enumerable: true, configurable: true}

所以,基本上,这取决于财产的设置方式。

答案 1 :(得分:0)

好问题,但答案是肯定的。无法修改或删除全局对象。全局对象是JavaScript所必需和内置的。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects