javascript testing .length and .length > 0

javascript testing .length and .length > 0

本文关键字:length gt and testing javascript      更新时间:2023-09-26

我在对象的属性中有一些文本。我正在测试对象的属性中是否有要显示的文本;如果没有,那么我显示"-"而不仅仅是空白。两者之间似乎没有区别:

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

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

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

只有MyObject.SomeTextMyObject.SomeText.length不是您期望的边缘情况 - 例如:

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

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

不,它们是等效的,如果长度等于 0,则值为 false

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

在javascript中,一个数字只有在0时才被认为是"假的"。任何其他值都是"真实"。因此,语句number != 0(比较,而不是身份)和!number是完全相同的。

您的两个陈述唯一不同的是length不是正数。

是一样的:

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

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

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