有人可以向我解释为什么这两个警告'真'?我认为逻辑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");
}
答案 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。
您对||的评论是对的。