提问人:Alberto De Caro 提问时间:10/11/2012 最后编辑:Alberto De Caro 更新时间:10/11/2012 访问量:374
JSON 文本和 Javascript 对象。我很困惑
JSON literals and Javascript objects. I am confused
问:
让我们考虑一下这段代码:
(function(){
var a = {"id": "1", "name": "mike", "lastname": "ross"};
var b = JSON.parse('{"id": "1", "name": "mike", "lastname": "ross"}');
var c = Object.create({"id": "1", "name": "mike", "lastname": "ross"});
document.write(typeof(a) + "</br>");
document.write(typeof(b) + "</br>");
document.write(typeof(c) + "</br>");
})();
问题
- 这三项作业之间有什么区别?
- 对象 a、b 和 c 是否完全重叠?
- 如果是,为什么?如果不是,为什么?
请在您的答案中添加参考资料。
演示。
答:
7赞
Rob W
10/11/2012
#1
a
并导致“相同的”对象(就像 abd 相同一样)。b
{a:1}
{a:1}
JSON.parse
分析输入 JSON 字符串,并输出分析后的值。在本例中为对象。
c
是不同的。Object.create
创建一个新对象,并将原型设置为第一个参数。您可以验证它是否等于(在前两种情况下不可用)。c.__proto__.id
1
乍一看,所有三种方法都会产生“相同”的对象:在所有情况下读取属性都会给出。在第三种情况下,此结果是由原型继承引起的。这提供了一个可能的功能:id
1
var x = Object.create({id:1});
x.id = NaN;
console.log(x.id);
// NaN
delete x.id;
console.log(x.id);
// 1 - The old value is back :)
// ( for x = {id: 1};, the old value would be gone! )
7赞
James Allardice
10/11/2012
#2
a
并且实际上是相同的(它们在相同的位置具有相同的属性,具有相同的值)。 是完全不同的。如果将对象记录到控制台,而不是将有限的信息打印到页面,则可以看到明显的差异:b
c
c
是右边的那个。它创建了一个没有自己属性的对象。您指定的属性实际上位于 上。这样做的原因是 Object.create
的第一个参数是要创建的对象。prototype
c
prototype
请注意,您可以使用来获得相同的效果 - 只需作为第一个参数传递:Object.create
Object.prototype
var d = Object.create(Object.prototype, {
"id": { "value": 1 }, //values are 'property descriptors'
"name": { "value": "mike" }
//etc...
});
评论