设置基元类型的属性似乎是无操作.会不会是错误


尝试

设置非对象变量的属性似乎是允许的,这让我感到惊讶,而且,它似乎是一个无操作:我没有看到检索set属性的方法。 例如(使用 node.js v8.9.1 的 REPL(:

> var x = 1
undefined
> typeof x
'number'
> x.foo = 'hello world'
'hello world'
> x.foo
undefined

我是否正确,试图设置x.foo是无操作? 如果是这样,有没有办法让解释器将语句x.foo = 'hello world'识别为错误 - 或者是否有一种惯用方法来防止这种对非对象变量的滥用?

不,不可能使这成为错误。将在其上分配属性的对象只是临时创建的,然后被丢弃,是的,但它并不总是无操作。该对象可以定义(继承(资源库:

Object.defineProperty(Number.prototype, "foo", {
    set(val) {
        console.log("setting "+this+".foo");
    },
    configurable: true,
});
var x = 1
x.foo = 'hello world'; // setting 1.foo

每当您使用基元时,就好像它们是对象一样,它们将被对象包装,因此:

x.foo = "hello world"

等于:

new Number(x).foo = "hello world"

由于包装器对象未存储在任何地方,因此将对其进行垃圾回收,包括您设置的属性。所以是的,设置基元的属性是没有意义的。

最新更新