JavaScript测试 .length 和 .length > 0

9

我有一些文本存在于一个对象的属性中。我正在测试是否存在文本以显示该对象的属性;如果没有,则显示"-"而不是空白。好像下面两种情况并没有区别:

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

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

有没有一些边缘情况,其中一种语法比另一种更可取?

2
只要.length的值在区间[0,∞)范围内,就应该没问题。 - Felix Kling
3
为什么您会再次询问一个非常类似的问题?http://stackoverflow.com/questions/8423754/javascript-testing-object-property-length - micnic
1
他又问了一个问题:http://stackoverflow.com/questions/8424275/javascript-testing-length,关于长度的问题你是不是有点过于着迷了? - micnic
5个回答

9

是否有一些边缘情况,其中一种语法比另一种更可取?

只有在MyObject.SomeTextMyObject.SomeText.length不是您所期望的情况下才会出现这种边缘情况 - 例如:

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

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

有什么问题吗?我首先测试一下属性中是否有文本,然后再调用.length。我应该如何重写我的测试? - frenchie
如果有文本,则必须具有.length,因此无需再次检查。明确一点:''(空字符串)被视为false,就像null、undefined、0和false一样。 - Eric Yin
不客气。对于这个新手问题,你可能是刚接触JavaScript。因为你有如此高的声誉。在JavaScript中,每个变量都非常灵活,基本上没有类型,你给它什么值,它就成为什么类型。所以if('')中的''变成了布尔类型,其值为false。我不喜欢JavaScript,当你有一大块代码后,会出现太多错误。 - Eric Yin
1
实际上,我正在构建一个单页Web应用程序,它非常依赖JavaScript:到目前为止,它已经有大约13K的JavaScript代码。但是我是一个刚刚开始涉足技术领域的商业人士:两年前,我不知道什么是类、JSON或SQL。所以我开始阅读5000页计算机书籍,学习编程并创办公司。请看这个链接:http://answers.onstartups.com/users/15155/frenchie 我询问长度的原因是我想确保我做得正确。如果技术人员能够学习销售、财务和市场营销,那么更多的初创公司将会诞生;反之亦然。 - frenchie

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

3

它们是一样的:

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

2
在JavaScript中,只有当数字为0时才被视为“falsey”(假值)。任何其他值都是“truthy”(真值)。因此,语句number != 0(比较,而不是身份)和!number完全等价。
你的这两个语句唯一不同的情况就是length是正数以外的值。

不,number!= 0 不等于!number - 它是布尔相反的。 - theharls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接