4

要将不同的数据类型(从数组到整数)传递给同一个函数,然后在更改其值之前检查数据类型,使用 instanceof Array 查看以下方法是否有更好/更有效的方法?

function foo(x) { 
  if (x instanceof Array) {
    for(i=0;i<x.length;i++){    
      x[i].bar = '1';
      x[i].baz = '2';       
    }   
  }
  else{
    x.bar = '1';
    x.baz = '2';    
  }
}

谢谢 :)

4

2 回答 2

2

另一种选择(使用 ECMAScript 标准)

if( Object.prototype.toString.call( x ) === '[object Array]' ) {

    for(i=0;i<x.length;i++) {  

      x[i].bar = '1';
      x[i].baz = '2';       
    }  
}

参见 ECMAScript

或者如果你总是希望它作为一个数组,但不推荐这样做

x = [].concat( x );
于 2013-06-16T17:30:56.940 回答
1

一种更有效的方法也可能是拆分您的功能(如果您可以的话):

function fooArray(x) { 
    for(i = 0; i < x.length; i++){    
        foo(x[i]);   
    }   
}

function foo(x) {
    x.bar = '1';
    x.baz = '2'; 
}

这也将应用 DRY 原则(“不要重复自己”),因为您不需要编写相同的逻辑(即x.bar = '1';)两次。

于 2013-06-16T17:59:14.440 回答