让我们考虑一下这段代码:
(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>");
})();
问题
请添加对您答案的引用。
答案 0 :(得分:7)
a
和b
会产生“缩进”对象(与{a:1}
abd {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! )
答案 1 :(得分:7)
a
和b
实际上是相同的(它们具有相同的属性,具有相同的值,位于相同的位置)。 c
完全不同。如果将对象记录到控制台而不是将有限的信息打印到页面,则可以看到明显的区别:
c
是右边的那个。它创建了一个没有自己属性的对象。您指定的属性实际上位于prototype
的{{1}}上。原因是Object.create
的第一个参数是要创建的对象的c
。
请注意,您可以使用prototype
来获得相同的效果 - 只需将Object.create
作为第一个参数传递:
Object.prototype