我正在使用Object.keys在JS中迭代对象的键,如下所示:
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,则第一个不应该抛出错误,而后者应该抛出错误。 到底是什么,谢谢JS。
如果你不帮助我,我会这样做,这让我很懊恼:
if(typeof cv === 'object'){
Object.keys(cv).forEach(function(key) {
this.destroyView(cv[key]);
}.bind(this));
}
结果表明,在ES6中,Object.keys的非对象参数将被强制转换为#34;进入一个物体,见: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
答案 0 :(得分:3)
如果你只是在迭代,那就是好的for...in
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]);
}
答案 1 :(得分:2)
我认为@Pointy有正确的答案,所以我会把它放在这里:
Object.keys(cv || {}).forEach(...)
基本上,如果未定义cv
,则使用虚拟对象并不执行任何操作。
另一种策略就是在var
:
var cv = view.childViews || {};