我有一些文本存在于一个对象的属性中。我正在测试是否存在文本以显示该对象的属性;如果没有,则显示"-"而不是空白。好像下面两种情况并没有区别:
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) { ... }
是否有一些边缘情况,其中一种语法比另一种更可取?
只有在MyObject.SomeText
或MyObject.SomeText.length
不是您所期望的情况下才会出现这种边缘情况 - 例如:
MyObject = {
SomeText = {
length: -42
// or length: true
}
};
if (MyObject.SomeText)
就足够了。''
(空字符串)被视为false,就像null、undefined、0和false一样。 - Eric Yinif('')
中的''
变成了布尔类型,其值为false。我不喜欢JavaScript,当你有一大块代码后,会出现太多错误。 - Eric Yinfalse
。它们是一样的:
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
== 0Boolean(MyObject.SomeText.length>0)
返回false
,因为MyObject.SomeText.length
<=0MyObject.SomeText.length
> 0,
Boolean(MyObject.SomeText.length)
返回true
,因为MyObject.SomeText.length
!= 0Boolean(MyObject.SomeText.length>0)
返回true
,因为MyObject.SomeText.length
> 0number != 0
(比较,而不是身份)和!number
完全等价。length
是正数以外的值。
.length
的值在区间[0,∞)
范围内,就应该没问题。 - Felix Kling