javascript:测试对象属性长度

时间:2011-12-07 22:50:39

标签: javascript

我有一些带有属性的对象。我想测试一下他们是否有字符,所以我最初写了这个:

if (MyObject.Prop1.length > 0) {....}

但是,有时候对象可能没有某个属性,所以我收到错误“无法获取长度”。

我写了这个改变了它:

if (MyObject.Prop1 && MyObject.Prop1.length > 0) {....}

我正在使用chrome检查器,当我运行代码时,我不再收到错误了。这会在每个浏览器中都有效吗?

感谢。

3 个答案:

答案 0 :(得分:4)

作为替代方案:

if ('Prop1' in MyObject && MyObject.Prop1.length > 0) { ... )

或者,更加小心:

if (MyObject.hasOwnProperty('Prop1') && MyObject.Prop1.length > 0) { ... }

当然,这可能是错误的,取决于“MyObject”的性质。

答案 1 :(得分:2)

是的,虽然你可以自己保存> 0并且只做

,但它会工作得很好
if (MyObject.Prop1 && MyObject.Prop1.length) {....}

因为零以外的任何东西都会评估为真。

答案 2 :(得分:2)

由于undefined0""在JavaScript中都是“假的”,因此这是等效的:

if(MyObject.Prop1) {
  // ...
}

Rick Waldron的"Idiomatic JavaScript"是一个很好的参考,可以在不牺牲正确性的情况下简化条件语句。您可以自己测试它的用途:

function testProp(val) {
  if(val) {
    return val.length;
  }

  return "nope!";
}

var myObj = { stringProp   : "foo",
              emptyStrProp : "",
              // undefinedProp is not defined
              zeroProp     : 0,
              twelveProp   : 12,
              otherObjProp : document.createElement('div'),
              arrayProp    : [ 'a', 'b' ]
            };

console.log( testProp( myObj.stringProp    ) ); // => 3
console.log( testProp( myObj.emptyStrProp  ) ); // => "nope!"
console.log( testProp( myObj.undefinedProp ) ); // => "nope!"

// of course if you're expecting values other than strings and undefined
// you'll have to account for them

console.log( testProp( myObj.zeroProp      ) ); // => "nope!"
console.log( testProp( myObj.twelveProp    ) ); // => undefined
console.log( testProp( myObj.otherObjProp  ) ); // => undefined
console.log( testProp( myObj.arrayProp     ) ); // => 2