我希望有一个明确的解释,以便更好地了解这里发生了什么?
我可以用Object创建看起来像基本类型的东西。它看起来像一个数字但不完全是一个字符串。我的印象是Object()用于在js(即类型对象)中创建所有对象,但不是基本类型,如number,string boolean。
答案 0 :(得分:1)
原语和对象的概念略微依赖于实现。但你可以这样想:
原语不是对象。它们有自己的特殊语义,例如字符串“hello”是相同的,无论你创建多少次。但是,对象new String("hello")
每次都应返回一个新字符串。
在许多实现中,当需要像对象一样操作时,会有自动装箱和拆箱原语,反之亦然。我建议您阅读此问题以获取更多详细信息:What is the difference between string literals and String objects in JavaScript?
答案 1 :(得分:1)
有时候需要将基本类型(布尔值,数字或字符串)转换为对象,尽管是暂时的。
看看这个例子:
var str = 'javascript';
str = str.substring(4);// You get "script" but how?
如何在不是对象的东西上调用函数?原因是原始值被包装到Object(String)中,在该Object(String)上定义了substring()方法。如果没有完成,您将无法在基本类型中调用该方法。这样的包装器称为Primitive Wrappers
。
此外,它并不意味着str现在已成为一个对象。所以,如果你说:
str.myProp = 10;
and then console.log(str.myProp);//You would get undefined
引用类型和原始包装器对象之间的区别是生命周期。原始包装很快就会死亡。
所以你可以想到
var str = 'javascript';
str = str.substring(4);// You get "script" but how?
如下所示:
var str = new String(“javascript”);
str = str.substring(4);
str = null;
现在开始你正在做的事情:
number = Object(5);
在这里,您将数字基元包装到对象中。就像你写的那样: number = new Number(5);
这里,Object(5)表现为工厂,根据输入的类型(数字,字符串),它通过将原始值包装到其中来返回对象。
因此,Object(5)
相当于new Number(5)
,而对象('test')就像是在说new String('test')
。
希望这有帮助!
答案 2 :(得分:0)
您可以使用Object.prototype.valueOf()
获取[[PrimitiveValue]]
5
或"test"
。
var number = new Object(5);
var aString = new Object("test");
console.log(number.valueOf(), aString.valueOf());