我理解以下代码将一个数字包装到一个对象中:
var x = Object(5);
因此,我期望并理解以下内容:
alert(x == 5); //true
alert(x === 5); //false
但是,我也理解对象是键/值对的列表。所以我希望以下内容有所不同:
alert(JSON.stringify(5)); //5
alert(JSON.stringify(x)); //5
x 的结构是什么样的?为什么它看起来不是键/值对格式?
最佳答案
Object constructor为给定值创建一个对象包装器,其类型对应于该值。
所以你得到一个Number object将数字传递给 Object
var x = Object(5);
和做的一模一样
var x = new Number(5);
打电话时 valueOf()在两者上,您再次获得原始值 5
,这就是为什么将其字符串化与将数字 5
字符串化相同,对象在字符串化之前转换为其原始值
JSON.stringify
的规范说
Boolean, Number, and String objects are converted to the corresponding primitive values during stringification, in accord with the traditional conversion semantics.
关于javascript - 理解 JavaScript 对象(值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34581270/