理解JavaScript对象(值)

时间:2016-01-03 20:31:46

标签: javascript

我理解以下代码将数字包装到对象中:

var x = Object(5);

因此,我期待并理解以下内容:

alert(x == 5); //true
alert(x === 5); //false

但是,我也理解对象是键/值对的列表。所以我希望以下内容有所不同:

alert(JSON.stringify(5)); //5
alert(JSON.stringify(x)); //5

x的结构是什么样的?为什么它看起来不是键/值对格式?

3 个答案:

答案 0 :(得分:11)

Object constructor为给定值创建一个对象包装器,该对象包含与该值对应的Type。

因此,在将数字传递给Object

时,您会得到一个Number object,其原始值为5
var x = Object(5);

与做

完全一样
var x = new Number(5);

在两者上调用valueOf()时,会再次返回原始值5,这就是为什么对其进行字符串化与将数字5字符串化相同,对象将转换为它的原因在字符串化之前的原始值

JSON.stringify的规范说

  

在字符串化过程中,Boolean,Number和String对象将转换为相应的原始值,符合传统的转换语义。

答案 1 :(得分:0)

var x = Object(5);

这个框5作为一个对象,所以Stringify只是取消了这个值。

如果为对象指定键/值,Stringify将显示为:

var x = {};
x.foo = "bar";

这是javascript鸭子打字 - 基本上如果它看起来像鸭子,听起来像鸭子,它必须是鸭子然而用数据类型替换鸭子,例如int或集合。 .https://en.m.wikipedia.org/wiki/Duck_typing

答案 2 :(得分:0)

在javascript控制台中,我输入了以下内容:

> var x = Object(5);
> x
[Number: 5]
> JSON.stringify(5)
'5'
> JSON.stringify(x)
'5'

使用Object(5)时,您正在创建一个具有键/值对的对象。但是,JSON.stringify()正在将该对象转换为字符串表示形式 - “5”。在原始数字5之类的文字值上调用JSON.stringify()也会返回它的字符串表示形式 - “5”。您将对象和基元都转换为字符串,这就是它们相等的原因。