使用Object()创建数字和字符串

时间:2017-05-11 16:56:01

标签: javascript

我希望有一个明确的解释,以便更好地了解这里发生了什么?

我可以用Object创建看起来像基本类型的东西。它看起来像一个数字但不完全是一个字符串。我的印象是Object()用于在js(即类型对象)中创建所有对象,但不是基本类型,如number,string boolean。

enter image description here

3 个答案:

答案 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());