force属性始终未定义

时间:2014-11-17 10:15:13

标签: javascript

我想要一个永远未定义的属性:

var foo = {bar:undefined}

如果有人后来尝试更改属性栏,那么它也会导致未定义。

foo.bar = 'someValue'//
foo.bar//this time this should result in undefined.

我的意思是如何设置一个不可更改的属性。

2 个答案:

答案 0 :(得分:1)

您目前可以这样做:

var foo = {}
Object.defineProperty(foo, 'bar', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: undefined
});

有些人指出,undefined不等于"undefined",显然是一个字符串。但是,为了清楚起见,我添加了它,因为省略value属性确实失去了能够使用defineProperty使它们不可配置的观点。一旦配置,它结束,所以它有用的价值。如果您希望它返回value,请忽略undefined

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

答案 1 :(得分:1)

好的,根据来自@somethinghere的提示(谁再次打破他/她自己的答案......)这里有一个工作示例,它设置一个对象成员,默认为undefined并且不可写:

var foo = {}
Object.defineProperty(foo, 'bar', {
    enumerable: false,
    configurable: false,
    writable: false
});

foo.bar = 'abcdefg';

console.log( foo.bar ); // returns undefined

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

请注意,您仍可以删除并重新设置此属性。 (虽然你不能简单地覆盖它。)