我正在读一本名为有效的JavaScript:68具体利用JavaScript的方法的书,第4点更喜欢对象包装的原语并且遇到了这句话。
获取和设置基元的属性会隐式创建对象 包装
这会创建一个对象包装器吗?
"hello".someProperty = 17;
修改
如果上述语句创建了一个对象,那么请解释一下这种行为。
var test = "foo";
test.bar = "new prop";
test.bar //this prints undefined.
答案 0 :(得分:2)
"hello".someProperty = 17;
上面的语句确实创建了一个对象包装器,但是一旦完成任务就会被处理掉。
var hello = 'Hello';
hello.someProperty = 17;
console.log(hello.someProperty);
这解释了为什么尝试将属性分配给基元不起作用,但也不会引发错误。分配属性成功,但该属性是在一个立即销毁的包装器对象上设置的。所以当你以后去查看房产时,再也没有了。
在内部,原始类型的this
为object
。
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}