Javascript 在“窗口”对象中重新定义“未定义”

Javascript 在“窗口”对象中重新定义“未定义”,javascript,Javascript,我想知道是否有可能创建一个名为“undefined”的函数,以便在调用undefined()时不会出错 我试过这样做 var obj = {}; obj[undefined] = function() {}; obj.undefined(); 它是有效的,但是,我想这样做: window[undefined] = function() {}; 但我的浏览器(Chrome44)不允许这样做 有什么想法吗?因为undefined是window对象的不可写属性 Object.getOwnPrope

我想知道是否有可能创建一个名为“undefined”的函数,以便在调用undefined()时不会出错

我试过这样做

var obj = {};
obj[undefined] = function() {};
obj.undefined();
它是有效的,但是,我想这样做:

window[undefined] = function() {};
但我的浏览器(Chrome44)不允许这样做


有什么想法吗?

因为
undefined
window
对象的不可写属性

Object.getOwnPropertyDescriptor(window, "undefined").writable
false
由于它是不可写的,它只会忽略写操作

引用

在现代浏览器(JavaScript 1.8.5/Firefox 4+)中,根据ECMAScript 5规范,
未定义
是一个不可配置、不可写的属性。即使不是这样,也要避免覆盖它


不允许这样做为什么?它是否显示了任何错误?我很难理解这将如何导致JS代码失败,甚至比它通常具有的可见性更低,@thefourtheye,no。它忽略了覆盖。是否有任何方法可以更改其描述符?@arm.localhost不,您不能。对于其他属性,您通常可以使用
Object.defineProperty
进行优化。我做了一个快速的研究,没有找到任何更改不可配置属性的方法。但是,我认为有一些解决方法和黑客:)(它是JS)@arm.localhost,
undefined
不应该是可写的。因此,覆盖意味着不符合规范:(