2012-08-16 100 views
0

我在对象的属性中有一些文本。我正在测试以查看对象的属性是否有文本显示;如果没有,那么我会显示“ - ”而不是空白。它似乎没有区别:javascript testing .length和.length> 0

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

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

是否有任何边界情况下一种语法会比另一种语法更可取?

+1

只要.length'是在'值范围'[0,∞]',应该没问题。 – 2012-08-16 17:05:49

+2

为什么你又问一个非常类似的问题? http://stackoverflow.com/questions/8423754/javascript-testing-object-property-length – micnic 2012-08-16 17:08:50

+0

他的另一个问题:http://stackoverflow.com/questions/8424275/javascript-testing-length再次长度为 你是痴迷于长度? – micnic 2012-08-16 17:19:13

回答

3

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

+0

有什么可以做错的?我在测试之前先测试一下属性中是否有文本。我应该如何重写我的测试? – frenchie 2012-08-17 14:07:14

+0

如果有文本,那么必须有.length,所以不需要再次检查。要清楚:''''(空字符串)被认为是false,就像null,undefined,0和false一样 – 2012-08-17 15:54:30

+0

啊,是的,谢谢你的想法。 – frenchie 2012-08-17 15:56:08

4

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

只有边缘的情况下MyObject.SomeTextMyObject.SomeText.length是不是你希望它是什么 - 例如:

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

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

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

1

在JavaScript中,一个数字只被认为是“falsey”,当它是0.任何其他值是“truthy”。因此,报表number != 0(比较,不是标识)和!number完全相同。

如果length是一个正数以外的数字,那么您的两个陈述会有所不同的唯一方法。

+0

不,数字!= 0不等于!数字 - 它是相反的布尔值。 – theharls 2017-11-14 04:24:14

1

这是相同的:

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或正integrer。所以

  • 如果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