我在对象的属性中有一些文本。我正在测试对象的属性中是否有要显示的文本;如果没有,那么我会显示“-”而不是空白。似乎没有区别:
if (MyObject.SomeText && MyObject.SomeText.length) { ... }
if (MyObject.SomeText && MyObject.SomeText.length > 0) { ... }
是否存在一种语法比另一种更可取的极端情况?
我在对象的属性中有一些文本。我正在测试对象的属性中是否有要显示的文本;如果没有,那么我会显示“-”而不是空白。似乎没有区别:
if (MyObject.SomeText && MyObject.SomeText.length) { ... }
if (MyObject.SomeText && MyObject.SomeText.length > 0) { ... }
是否存在一种语法比另一种更可取的极端情况?
他们给出相同的结果。顺便说一句,如果它的“文本”,那就if (MyObject.SomeText)
足够了
是否存在一种语法比另一种更可取的极端情况?
只有在边缘情况下MyObject.SomeText
或MyObject.SomeText.length
不是你所期望的——例如:
MyObject = {
SomeText = {
length: -42
// or length: true
}
};
不,它们是等价的,如果长度等于 0,则其值为false
。
(这是可能的,因为 JS 不是强类型的,在强类型语言中长度不能转换为布尔值)。
在 javascript 中,一个数字只有在为 0 时才被认为是“假的”。任何其他值都是“真”。因此,陈述number != 0
(比较,而不是同一性)!number
完全等价。
您的两个陈述不同的唯一方法是如果length
不是正数。
一样的:
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
== 0Boolean(MyObject.SomeText.length>0)
false
因为MyObject.SomeText.length
<=0而返回MyObject.SomeText.length
> 0,
Boolean(MyObject.SomeText.length)
返回true
因为MyObject.SomeText.length
!= 0Boolean(MyObject.SomeText.length>0)
返回true
因为MyObject.SomeText.length
> 0