我在对象的属性中有一些文本。我正在测试对象的属性中是否有要显示的文本;如果没有,那么我会显示“-”而不是空白。似乎没有区别:
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