Javascript ES5:JS中的Object.keys本机方法
我使用Object.keys在JS中迭代对象的键,如下所示:Javascript ES5:JS中的Object.keys本机方法,javascript,Javascript,我使用Object.keys在JS中迭代对象的键,如下所示: var cv = view.childViews; Object.keys(cv).forEach(function(key) { this.destroyView(cv[key]); }.bind(this)); 但是,当cv未定义或不是对象时,object.keys会抛出错误。与在Object.
var cv = view.childViews;
Object.keys(cv).forEach(function(key) {
this.destroyView(cv[key]);
}.bind(this));
但是,当cv未定义或不是对象时,object.keys会抛出错误。与在Object.keys周围放置if语句来检查cv的类型是否为对象不同,是否有一个本机方法比Object.keys更好,因为如果cv未定义,它不会引发错误
这不是我的全部观点:
Object.keys(cv) vs cv.keys().each()
如果cv为null,则第一个不应抛出错误,而后一个应抛出错误。
见鬼,谢谢你
如果你不帮我,我会这么做,这让我很懊恼:
if(typeof cv === 'object'){
Object.keys(cv).forEach(function(key) {
this.destroyView(cv[key]);
}.bind(this));
}
事实证明,在ES6中,object.keys的非对象参数将被“强制”为对象,请参见:
我认为@Pointy的答案是正确的,所以我把它放在这里:
Object.keys(cv || {}).forEach(...)
基本上,如果未定义cv
,则使用虚拟对象而不执行任何操作
另一种策略是在var
中也这样做:
var cv = view.childViews || {};
如果你只是在迭代,有一个很好的方法
关于
Object.keys(cv |{}).forEach(…)
如何不幸的是,typeof
可能是唯一允许未定义运算符的运算符。@Pointy在cv
未声明时不起作用:未捕获引用错误:未定义cv
@Derek朕會功夫 当然可以,但是上面一行的作业也会失败。(在这种情况下,我会在var
语句中执行|{}
。@Pointy我想:)注意中的…也会迭代继承的属性
for(var i in null){
alert(i);
}
for(var i in undefined){
alert(i);
}
var obj = {hello: 'world'};
for(var i in obj){
alert(i);
alert(obj[i]);
}