在Javascript中控制台记录比较器布尔值

时间:2018-01-08 13:05:57

标签: javascript boolean console.log

不知何故,我设法通过谷歌搜索得到一个很好的答案。 Java dev这里是Javascipt的新手。

我有这段代码:

console.log('this.props.projectData.length: ' + this.props.projectData.length);
console.log('this.props.projectData.length >= 0 : ' + this.props.projectData.length >= 0);

输出:

this.props.projectData.length: 107
false

所以,首先,为什么它没有记录第二行的String部分,其次,为什么它是错误的,因为它显然是正确的。长度为107,因此它大于0。

3 个答案:

答案 0 :(得分:1)

  

为什么它是假的,因为它显然是真的?

这里的问题只是operator precedence。为简单起见,假设我们有这个数组...

var arr = [1, 2, 3];

...其长度明显> 0

如果我们这样做:

var arr = [1, 2, 3];
console.log("length > 0: " + arr.length > 0)

我们其实在做两件事。

  1. 计算总和"length > 0: " + arr.length
  2. 然后,将该总和的结果与0
  3. 进行比较

    因此,由于运算符优先级,我们这样做:

    ("length > 0: " + arr.length) > 0
    

    让我们来证明一下。第一:

    var arr = [1, 2, 3];
    console.log("length > 0: " + arr.length)

    我们正在为字符串添加一个数字,这为我们提供了一个字符串"length > 0: 3"

    然后,我们将字符串与数字进行比较:

    var arr = [1, 2, 3];
    console.log("length > 0: 3" > 0)

    NaN > 0的内容相同。当然,这是false

    <强>解决方案

    你想要的是这个:

    var arr = [1, 2, 3];
    console.log("length > 0: " + (arr.length > 0))
    //grouping operator here ----^--------------^

答案 1 :(得分:0)

试试这个:

console.log('this.props.projectData.length: ', this.props.projectData.length);
console.log('this.props.projectData.length >= 0 : ', this.props.projectData.length >= 0);

答案 2 :(得分:-1)

只有一个变化,

console.log('this.props.projectData.length >= 0 : ' + this.props.projectData.length);

你正在检查这里的长度,它正在成为现实。 但现在它会正常工作。