在javascript中没有数字条件

时间:2017-09-21 17:12:34

标签: javascript reactjs

我遇到了让我很奇怪的情况。我正在研究React,因为我在这样的渲染方法上给出了一个条件:

 if (!this.props.allYearData || !this.props.Growth)
      return <Loading />;

但是,我的页面始终显示加载符号。如果条件和两个数据都处于定义状态,我控制数据我给出的数据,但我的增长显示0值。所以我注释了this.props.Growth并加载了我的页面。所以我只是想知道为什么JavasSript没有将0视为定义值?我总觉得!表示undefined。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

0是假的。 !是否定运算符。因此!0将是&#34;而不是假的&#34;或者真实的。将评估if语句条件中导致if块的Truthy值。

详细

有关Truthy / Falsy的更多信息,请参阅Custom cell

以下是一些例子:

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)