JavaScript测试.length和.length > 0

whhtz7ly  于 5个月前  发布在  Java
关注(0)|答案(6)|浏览(108)

我在一个对象的属性中有一些文本。我正在测试该对象的属性中是否有要显示的文本;如果没有,那么我将显示“-”而不仅仅是一个空白。看起来这两者之间没有区别:

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

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

字符串
是否有任何边缘情况下,一种语法会比另一种更可取?

ds97pgxw

ds97pgxw1#

是否有任何边缘情况下,一种语法会比另一种更可取?
仅限MyObject.SomeTextMyObject.SomeText.length不是您期望的边缘情况-例如:

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

字符串

axr492tv

axr492tv2#

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

7cjasjjr

7cjasjjr3#

不,它们是等价的,如果长度等于0,那么它的值为false
(This可能是因为JS不是强类型的,在强类型语言中,长度不能被转换为布尔值)。

flseospp

flseospp4#

是一样的:

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
t30tvxxf

t30tvxxf5#

在JavaScript中,一个数字只有当它是0时才被认为是“falsey”。任何其他值都是“truthy”。因此,number != 0(比较,而不是同一性)和!number语句是完全等价的。
你的两个陈述唯一不同的地方是length不是正数。

7gs2gvoe

7gs2gvoe6#

我将从一个关心阅读代码和人类思想的人的Angular 来回答。
是的,它们实际上是一样的,所以归结为风格。

  • MyObject.SomeText.length > 0显式地询问“此字符串中是否有字符”?
  • MyObject.SomeText.length询问“这个字符串是否有长度属性”?它依赖于额外的知识,即JavaScript隐式地执行与前一个相同的检查。

我更喜欢don't make me think的概念。
在未来,没有人,即使是初级开发人员,在浏览MyObject.SomeText.length > 0时也会问,if检查是做什么的?是否有任何边缘情况?

相关问题