Ann*_* K. 15 javascript loops object
我读到在循环对象时我们应该总是使用hasOwnProperty,因为对象可以被其他东西修改以包含我们不想要的一些键
但这总是需要吗?有没有不需要的情况?这也是局部变量所必需的吗?
function my(){
var obj = { ... };
for(var key in obj){
if(obj.hasOwnProperty(key)){
safe
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不需要,我只是不喜欢在循环内添加额外的东西.
http://phrogz.net/death-to-hasownproperty
这家伙说我不应该再用它了.
Mat*_*zer 28
Object.hasOwnProperty 确定整个属性是在对象本身还是在原型链中定义的.
换句话说:如果您希望属性(包含数据或函数)来自除对象本身之外的其他位置,请执行所谓的检查.
例如:
function A() {
this.x = "I'm an own property";
}
A.prototype.y = "I'm not an own property";
var instance = new A();
var xIsOwnProperty = instance.hasOwnProperty("x"); // true
var yIsOwnProperty = instance.hasOwnProperty("y"); // false
Run Code Online (Sandbox Code Playgroud)
由于ECMA-Script 5.x,Object有一个新函数Object.keys,它返回一个字符串数组,其中的项是给定对象的自己的属性:
var instance = new A();
// This won't contain "y" since it's in the prototype so
// it's not an "own object property"
var ownPropertyNames = Object.keys(instance);
Run Code Online (Sandbox Code Playgroud)
此外,由于ECMA脚本5.x中,Array.prototype已经Array.prototype.forEach可以让执行for-each循环流畅:
Object.keys(instance).forEach(function(ownPropertyName) {
// This function will be called for each found "own property", and
// you don't need to do the instance.hasOwnProperty check anymore
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6267 次 |
| 最近记录: |