JavaScript - JSON对象可以继承父原型属性吗?

时间:2016-12-23 17:29:38

标签: javascript json

有时我在JSON字符串对象上运行以下命令:

for(var i in JSONObject){
    ....
}

我需要在这里运行.hasOwnProperty吗?我假设因为JSON没有从父对象扩展,所以可以安全地假设它的所有属性都是它自己的。

2 个答案:

答案 0 :(得分:3)

  

我假设由于JSON没有从父对象扩展,因此可以安全地假设它的所有属性都是它自己的。

那不太对劲。除非通过Object.create(null)创建了一个对象,否则它的原型链中会有Object.prototype。您提到的hasOwnProperty等属性或toString在此处定义。因此,大多数对象不仅仅拥有自己的"属性,包括通过JSON.parse从JSON创建的对象 但是,Object.prototype上定义的所有标准属性都不可枚举,因此不会出现在for..in循环中。

那么,你应该使用hasOwnProperty吗?经常这样:取决于。

如果您确定没有使用的代码,无论是您自己的代码还是第三方代码,都会将可枚举的属性添加到Object.prototype,那么就没有理由使用{{ 1}}在循环中。

如果您对此不确定,那么您可能希望使用hasOwnProperty,但最好不要使用可枚举属性扩展hasOwnProperty并避免使用第三方代码。

相关:

答案 1 :(得分:-2)

我对此进行了几次测试,JSON字符串不会传输继承的属性。因此,假设您在美化之后从端点获得API响应:

{
    "one": "blue",
    "two": "watermellon",
    "three": "lalal",
    "four": "value"
}

如果对上面解析的值运行for(var i in JSONObject)循环,只要未将任何属性显式附加到父对象文字,就只能找到与该对象关联的四个属性( Object.prototype)在您当前的环境中。