5

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

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

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

是否存在一种语法比另一种更可取的极端情况?

4

5 回答 5

7

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

于 2012-08-16T17:04:52.627 回答
5

是否存在一种语法比另一种更可取的极端情况?

只有在边缘情况下MyObject.SomeTextMyObject.SomeText.length不是你所期望的——例如:

MyObject = {
    SomeText = {
        length: -42
        // or length: true
    }
};
于 2012-08-16T17:03:40.140 回答
4

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

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

于 2012-08-16T17:04:09.163 回答
2

在 javascript 中,一个数字只有在为 0 时才被认为是“假的”。任何其他值都是“真”。因此,陈述number != 0(比较,而不是同一性)!number完全等价。

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

于 2012-08-16T17:04:55.740 回答
2

一样的:

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

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

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
于 2012-08-16T17:08:43.867 回答