一次测试多于2个值的相等性的快速方法?

时间:2014-11-25 18:04:30

标签: javascript

我想知道是否有一种快速的方法来测试js中两个以上值的相等性。类似于(= 6 6 6)的东西。

在控制台中,我尝试过像......

1 == 1 == 1 == 1
true
2 == 2 == 2 == 2
false
0 == 0 == 0
false
0 == 0 == 0 == 0
true

......这很有趣,但也令人费解。

在js中有快速的方法吗?

感谢。

5 个答案:

答案 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