javascript testing .length和.length> 0

时间:2012-08-16 17:00:48

标签: javascript

我在对象的属性中有一些文本。我正在测试该对象的属性是否包含要显示的文本;如果没有,那么我显示“ - ”而不是空白。看起来似乎没有区别:

if (MyObject.SomeText && MyObject.SomeText.length) { ... }

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

是否存在一种边缘情况,其中一种语法优于另一种语法?

5 个答案:

答案 0 :(得分:5)

  

是否存在一种边缘情况,其中一种语法优于另一种语法?

只有MyObject.SomeTextMyObject.SomeText.length不符合您预期的边缘情况 - 例如:

MyObject = {
    SomeText = {
        length: -42
        // or length: true
    }
};

答案 1 :(得分:4)

他们给出了相同的结果。顺便说一句,如果是“文本”,那么if (MyObject.SomeText)就足够了

答案 2 :(得分:3)

不,它们是等价的,如果长度等于0,那么它的值为false

(这是可能的,因为JS不是强类型的,在强类型语言中,长度不能被转换为boolean)。

答案 3 :(得分:1)

在javascript中,当数字为0时,数字仅被视为“falsey”。任何其他值都是“truthy”。因此,语句number != 0(比较,而非身份)和!number完全相同。

你的两个陈述不同的唯一方法是length不是正数。

答案 4 :(得分:1)

它是一样的:

Boolean(MyObject.SomeText.length)
    如果true!= 0 ,
  • 会返回MyObject.SomeText.length 如果false == 0
  • 会返回MyObject.SomeText.length

Boolean(MyObject.SomeText.length>0)
    如果true>
  • 返回MyObject.SomeText.length 0
  • 如果false< = 0 ,
  • 会返回MyObject.SomeText.length

MyObject.SomeText.length只能是0或正整数。所以

  • 如果MyObject.SomeText.length == 0,
    • Boolean(MyObject.SomeText.length)返回 false ,因为MyObject.SomeText.length == 0
    • Boolean(MyObject.SomeText.length>0)返回 false ,因为MyObject.SomeText.length< = 0
  • 如果MyObject.SomeText.length> 0,
    • Boolean(MyObject.SomeText.length)返回 true ,因为MyObject.SomeText.length!= 0
    • Boolean(MyObject.SomeText.length>0)返回 true ,因为MyObject.SomeText.length> 0