Javascript - 获取和设置基元的属性会隐式创建对象包装器

时间:2017-12-22 04:22:41

标签: javascript

我正在读一本名为有效的JavaScript:68具体利用JavaScript的方法的书,第4点更喜欢对象包装的原语并且遇到了这句话。

  

获取和设置基元的属性会隐式创建对象   包装

这会创建一个对象包装器吗?

"hello".someProperty = 17;

修改

如果上述语句创建了一个对象,那么请解释一下这种行为。

var test = "foo";
test.bar = "new prop";
test.bar //this prints undefined.

3 个答案:

答案 0 :(得分:2)

"hello".someProperty = 17;

上面的语句确实创建了一个对象包装器,但是一旦完成任务就会被处理掉。

var hello = 'Hello';
hello.someProperty = 17;
console.log(hello.someProperty);

这解释了为什么尝试将属性分配给基元不起作用,但也不会引发错误。分配属性成功,但该属性是在一个立即销毁的包装器对象上设置的。所以当你以后去查看房产时,再也没有了。

在内部,原始类型的thisobject

String.prototype.thisType = function () {
    return typeof this;
};
var hello = "hello";

console.log(typeof hello);
console.log(hello.thisType());

了解更多Here

答案 1 :(得分:1)

是的,它会创建一个中间对象,在使用后会被丢弃。声明

"hello".someProperty = 17;

将在内部执行如下:

var temp = new String("hello");  // or any other variable name
temp.someProperty = 17;

因此,现在temp(或由JavaScript创建的任何命名变量)将无法访问,因为它是立即创建和丢弃的。

答案 2 :(得分:0)

您必须通过新的关键字创建字符串对象。

var str = new String("My String");
//Here str is looks like
//String {"My String"}
str .xyz=5
str 
//now String {"My String", xyz: 5}