javascript 中是否可以使用多个比较运算符?
Are multiple comparison operators possible in javascript?
所以我在浏览器控制台中编写
4 < 5
正确
4 < 5 < 10
正确
7 < 4 < 10
正确
前两个说法没问题,为什么最后一个说法也正确?我会认为(如在数学中)表达式将是“AND”?任何人都可以向我指出 MDN 或讨论此内容和规则的类似资源吗?
Javascript 的作用是首先计算左侧:
4 < 5 => true
然后继续休息:
true < 10 => true
因为左边的true
被强制变成了数 (1
),以及 1 < 10 === true
。 (false
在与数字的比较中被强制转换为 0
)。
检查这些看起来很有趣的东西"goofs":
console.log(3 < 2 < 1)
console.log(1 < 1 < 1)
4 < 5
的计算结果为 true
。然后将 true
与 10
进行比较。 Javascript 将 true
转换为 1
并且由于 1
小于 10
结果为 true
.
使用此逻辑,如果您尝试 4 < 5 < 3
,同样的逻辑也会 return 正确,而 4 < 5 < 1
将 return 错误。
console.log( false < 10) // true
console.log( true < 10) // true
因为false(0)小于10
而 true (1) 也小于 10.
除了使用多个比较运算符编写持续检查的无效方法之外,当下一次比较发生在上一次比较的结果时,您可以为比较运算符获取一个数组和一个函数,并且迭代每对要检查的项目。然后return结果。
const compare = (values, fn) => values.slice(1).every((b, i) => fn(values[i], b));
console.log(compare([7, 4, 10], (a, b) => a < b)); // false
console.log(compare([4, 7, 10], (a, b) => a < b)); // true
console.log(compare([2, 1, 0], (a, b) => a > b)); // true
所以我在浏览器控制台中编写
4 < 5
正确
4 < 5 < 10
正确
7 < 4 < 10
正确
前两个说法没问题,为什么最后一个说法也正确?我会认为(如在数学中)表达式将是“AND”?任何人都可以向我指出 MDN 或讨论此内容和规则的类似资源吗?
Javascript 的作用是首先计算左侧:
4 < 5 => true
然后继续休息:
true < 10 => true
因为左边的true
被强制变成了数 (1
),以及 1 < 10 === true
。 (false
在与数字的比较中被强制转换为 0
)。
检查这些看起来很有趣的东西"goofs":
console.log(3 < 2 < 1)
console.log(1 < 1 < 1)
4 < 5
的计算结果为 true
。然后将 true
与 10
进行比较。 Javascript 将 true
转换为 1
并且由于 1
小于 10
结果为 true
.
使用此逻辑,如果您尝试 4 < 5 < 3
,同样的逻辑也会 return 正确,而 4 < 5 < 1
将 return 错误。
console.log( false < 10) // true
console.log( true < 10) // true
因为false(0)小于10 而 true (1) 也小于 10.
除了使用多个比较运算符编写持续检查的无效方法之外,当下一次比较发生在上一次比较的结果时,您可以为比较运算符获取一个数组和一个函数,并且迭代每对要检查的项目。然后return结果。
const compare = (values, fn) => values.slice(1).every((b, i) => fn(values[i], b));
console.log(compare([7, 4, 10], (a, b) => a < b)); // false
console.log(compare([4, 7, 10], (a, b) => a < b)); // true
console.log(compare([2, 1, 0], (a, b) => a > b)); // true