JS逻辑和/或

时间:2016-05-26 20:59:41

标签: javascript logical-operators

有人可以向我解释为什么这两个警告'真'?我认为逻辑OR是有道理的 - 第一次测试后的OR短路:100!= 90,因此它是真的。为什么第一次测试后的AND短路而不继续?

function rimes(num){
    var outputArr = [];

    for(var i=1; i<=num; i++){  
        function range(start, count) {
            return Array.apply(0, Array(count))
                    .map(function (element, index) { 
                             return index + start;  
                         });
        }
        var rangeArr = range(1,num);
        var current = i;

        function rangeFiltering(value){
            return value !== 1 && value < current;
        }
        var filteredRange = rangeArr.filter(rangeFiltering);

        function dividingByEachRangeElement(rangeElement){
          return current % rangeElement !== 0;
        }
        var divided = filteredRange.filter(dividingByEachRangeElement);

        if(divided.length === num - 2){  //current is prime if there are all numbers from 1 to current in divided array.(if there are zeros after modulo) i.e. when current is 5(prime), divided array is [2,3,4]. When current is 6(non prime), divided arr is [4,5] - 2,3 are missing because 6%2 = 0 and 6%3 = 0. 
            outputArr.push(current);
        }
    }
    console.log(outputArr);
}
sumPrimes(47);


//sumPrimes(6)  -> [];
//sumPrimes(7)  -> [7];
//sumPrimes(11) -> [11];
编辑:谢谢大家的帮助!根据你的建议,我认为我会将我的代码告诉你:

if (100 != 90 && 100 && 190 && 200 && 290){
    alert("true");
} else {
    alert("false");
}

if (100 != 90 || 100 || 190 || 200 || 290){
    alert("true");
} else {
    alert("false");
}

2 个答案:

答案 0 :(得分:1)

这将评估为真:

filename.split("_")

因为每个部分都是真实的。 javascript中的任何非零值都被认为等同于true。所以你有:

if (100 != 90 && 100 && 190 && 200 && 290)

显然,这是真的。这不是短路,因为没有一个值是错误的。

我怀疑你犯的错误是认为这个:

if (true && true && true && true && true)

做同样的事情:

if (100 != 90 && 100)

这根本不是语法的工作原理。很容易用单词“如果100不等于90并且不等于100”并且理解这意味着什么,但在javascript(和大多数其他语言)中你必须是明确的。

现在很明显,如果您有一个值需要与一长串值进行比较,这会非常繁琐,例如:

if (100 != 90 && 100 != 100)

在这样的情况下,通常更容易将所有值放入数组中,而是询问该数组中是否包含if (x != 90 && x != 100 && x != 190...)

x

答案 1 :(得分:0)

对于&amp;&amp;,前100个!= 90评估为真。然后,整数被隐式转换为bools,其中0 = false,否则为true。真实将贯穿数字,其中没有数字为0。

您对||的评论是对的。