一次测试 2 个以上值的相等性的快速方法
A quick way to test equality of more than 2 values at once?
我想知道是否有一种快速方法来测试 js 中两个以上值的相等性。类似于 (= 6 6 6)。
在控制台中,我尝试了类似...
1 == 1 == 1 == 1
true
2 == 2 == 2 == 2
false
0 == 0 == 0
false
0 == 0 == 0 == 0
true
。这很有趣,但也令人费解。
有没有一种快速的方法可以在 js 中做到这一点?
谢谢。
您出现意外行为的原因是我们需要稍微调整一下您对 js 的期望;) 2 == 2 == 2 == 2
做了3个比较,都是从左到右。 第一个比较是最左边的2 == 2
,其计算结果为 true。 之后,我们得到第一次比较的结果,与(在这种情况下)进行比较 第三2
. 即,true === 2
,这是错误的。 最后,我们得到false === 2
,这也是错误的。
可视化可能会有所帮助:
(((2 == 2) == 2)== 2)
我认为总的来说,a === b && b === c
可能是你要找的。
编辑:啊,对不起,我一直在为===
切换==
。 这只是习惯。 这是我推荐的习惯。 ===
运算符不执行类型强制转换,因此它计算的值正确,而不是值的强制转换版本。
这是因为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];});
}
是的,你可以,但你需要使用"逻辑运算符",如 &&&或 || 来检查 1 个以上的语句,如 (x<1 &&>0)。您可以将其用作快速简便的参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
如果值超过三个,则创建用于数组的函数可能更方便:
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)
作为@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()
= 假
[1,1,1].isHomogeneous()
= 真
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- setInterval 只在对象方法上运行一次
- Javascript 计时器只调用一次 Code 隐藏方法
- 优化的方法;标题“;只发送一次POST请求即可访问网站
- 一次更改数组的多个值的最短方法
- 有没有一种方法可以在一次调用中修改每个jquery对象的特定属性
- 从命令行一次运行大量摩卡测试的好方法是什么
- 有没有可能的方法可以在一次ASP按钮单击中同时显示JavaScript和服务器端代码中的消息
- 在AngularJS中,一次进行两次调用是一种可接受的方法
- SignalR 一次订阅所有中心/方法
- 只需要运行一次 location.reload 方法
- 一种一次编辑具有不同值的表的多行的方法
- 一次测试 2 个以上值的相等性的快速方法
- 在每秒 10 次调用限制的情况下一次发出 50 个 API 请求的有效方法是什么(烂番茄 API)
- 在Angularjs中只运行一次方法
- 有没有一种方法可以包括<脚本>或者<link>在所有页面中显示一次
- jQuery函数,每10秒从客户端调用一次控制器方法mvc剃刀
- cookie是jQuery为每个用户只打开一次弹出窗口的唯一方法吗?或者jQuery可以处理IP验证
- 在一次使用后删除Javascript模块中的公共方法
- 有没有一种正确的方法可以确保一次只有一个用户使用REST+HTTP对对象进行更改