我在对象的属性中有一些文本。我正在测试该对象的属性是否包含要显示的文本;如果没有,那么我显示“ - ”而不是空白。看起来似乎没有区别:
if (MyObject.SomeText && MyObject.SomeText.length) { ... }
if (MyObject.SomeText && MyObject.SomeText.length > 0) { ... }
是否存在一种边缘情况,其中一种语法优于另一种语法?
答案 0 :(得分:5)
是否存在一种边缘情况,其中一种语法优于另一种语法?
只有MyObject.SomeText
或MyObject.SomeText.length
不符合您预期的边缘情况 - 例如:
MyObject = {
SomeText = {
length: -42
// or length: true
}
};
答案 1 :(得分:4)
他们给出了相同的结果。顺便说一句,如果是“文本”,那么if (MyObject.SomeText)
就足够了
答案 2 :(得分:3)
不,它们是等价的,如果长度等于0,那么它的值为false
。
(这是可能的,因为JS不是强类型的,在强类型语言中,长度不能被转换为boolean)。
答案 3 :(得分:1)
在javascript中,当数字为0时,数字仅被视为“falsey”。任何其他值都是“truthy”。因此,语句number != 0
(比较,而非身份)和!number
完全相同。
你的两个陈述不同的唯一方法是length
不是正数。
答案 4 :(得分:1)
它是一样的:
Boolean(MyObject.SomeText.length)
true
!= 0 ,MyObject.SomeText.length
如果false
== 0 MyObject.SomeText.length
和
Boolean(MyObject.SomeText.length>0)
true
> MyObject.SomeText.length
0 false
< = 0 ,MyObject.SomeText.length
但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