我想知道是否有一种快速的方法来测试js中两个以上值的相等性。类似于(= 6 6 6)的东西。
在控制台中,我尝试过像......
1 == 1 == 1 == 1
true
2 == 2 == 2 == 2
false
0 == 0 == 0
false
0 == 0 == 0 == 0
true
......这很有趣,但也令人费解。
在js中有快速的方法吗?
感谢。
答案 0 :(得分:3)
您遇到意外行为的原因是因为我们需要稍微调整您的期望值;)2 == 2 == 2 == 2
进行3次比较,所有这些都是从左到右。第一个比较是最左边的2 == 2
,其评估结果为true。之后,我们将第一次比较的结果与第三次2
进行比较(在这种情况下是什么)。即true === 2
,这是假的。最后,我们得到false === 2
,这也是错误的。
将其可视化可能有所帮助:
(((2 == 2)== 2)== 2)
我认为一般a === b && b === c
可能就是你要找的东西。
编辑:啊,对不起,我继续为==
切换===
。这只是习惯。这是我推荐的习惯。 ===
运算符不进行类型转换,因此它会适当地计算值,而不是值的转换版本。
答案 1 :(得分:1)
这是因为true == 1
,但是true != 2
您可以尝试:
function isEquals() {
var flag = true;
for(var i=1; i<arguments.length; i++) flag = flag && (arguments[i] == arguments[0]);
return flag;
}
isEquals(2,2,2); // true
或:
function isEquals() {
var ar = arguments;
return Array.prototype.every.call(arguments, function(a){return a==ar[0];});
}
答案 2 :(得分:0)
是的,你可以,但你需要使用像“&amp;&amp;”这样的“逻辑运算符”。或||检查多于1个语句(x&lt; 1&amp;&amp; y&gt; 0)。 您可以使用它作为一个快速简单的参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
答案 3 :(得分:0)
如果您有三个以上的值,创建一个在数组上使用的函数可能会更方便:
function allEqual(arr) {
return arr.every(function (x, i) {
return i === 0 || x === arr[i - 1];
});
}
allEqual([1, 1, 1])
ES6:
function allEqual(...arr) {
return arr.every((x, i) => i === 0 || x === arr[i - 1]);
}
allEqual(1, 1, 1)
答案 4 :(得分:0)
作为@ vp_arth答案的补充,您甚至可以向Array原型添加方法
Array.prototype.isHomogeneous = function(){
return Array.prototype.every.call(this, function(c,i,a){ return c === a[0];})
}
所以你可以做到
[1,2,3].isHomogeneous()
= false
[1,1,1].isHomogeneous()
= true