我知道以下代码将一个数字包装到一个对象中:
var x = Object(5);
因此,我期望并理解以下内容:
alert(x == 5); //true alert(x === 5); //false
但是,我也理解对象是键/值对的列表.所以我希望以下内容有所不同:
alert(JSON.stringify(5)); //5 alert(JSON.stringify(x)); //5
x的结构是什么样的?为什么它看起来不是键/值对格式?
该对象的构造创建对应于该值的类型的给定的值的对象的包装.
因此,在传递数字时,您将获得一个具有原始值5 的Number对象Object
var x = Object(5);
它和做的完全一样
var x = new Number(5);
打电话时的valueOf()两个,你得到的原始值5
回来了,这就是为什么字符串化它给出了相同的字符串化的数量5
,将对象转换为它的字符串化之前的原始值
说明的JSON.stringify
说明
根据传统的转换语义,在字符串化期间将Boolean,Number和String对象转换为相应的原始值.