我遇到了让我很奇怪的情况。我正在研究React,因为我在这样的渲染方法上给出了一个条件:
if (!this.props.allYearData || !this.props.Growth)
return <Loading />;
但是,我的页面始终显示加载符号。如果条件和两个数据都处于定义状态,我控制数据我给出的数据,但我的增长显示0值。所以我注释了this.props.Growth
并加载了我的页面。所以我只是想知道为什么JavasSript没有将0视为定义值?我总觉得!
表示undefined
。有人可以解释一下吗?
答案 0 :(得分:2)
0
是假的。 !
是否定运算符。因此!0
将是&#34;而不是假的&#34;或者真实的。将评估if
语句条件中导致if
块的Truthy值。
以下是一些例子:
true // truthy
false // falsy
!true // falsy (negation operator, it says "opposite of")
!false // truthy
0 // falsy (this is because booleans are represented as 0 and 1 in binary,
// 0 being false)
!0 // truthy
undefined // falsy
!undefined // truthy
答案 1 :(得分:2)
你的印象!运算符在JS(以及大多数其他语言)中相当不合适。它并不意味着未定义,它通常总是意味着&#34;不是&#34;,所以:
if (!condition)
表示&#34;如果条件不正确&#34;
false,undefined,null,0和一个空字符串,如&#39;&#39;将全部归还&#34; falsey&#34;在javascript中如果在条件运算符中使用,如if,而其他所有内容都将返回&#34; truthy&#34;。这是大多数松散类型语言中相当标准的做法,你在python中发现了类似的行为,虽然一个重要的区别是在JS中,空数组不是假的,而在python中它是。
如果您只想知道该值是否未定义,那很简单:
if (this.props.allYearData !== undefined || this.props.Growth !== undefined)