ES5:JS中的Object.keys本机方法

时间:2015-07-15 01:29:17

标签: javascript

我正在使用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

2 个答案:

答案 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 || {};