有时我在JSON字符串对象上运行以下命令:
for(var i in JSONObject){
....
}
我需要在这里运行.hasOwnProperty
吗?我假设因为JSON没有从父对象扩展,所以可以安全地假设它的所有属性都是它自己的。
答案 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
)在您当前的环境中。