如何以这种方式比较 3 个值?



我需要一种方法来像这样简单地比较 3 个值:

'aaa'=='aaa'=='aaa'
false

但如您所见,它不起作用。为什么?

使用 2 个值,它确实明显有效:

'aaa'=='aaa'
true

比较前两个值的计算结果为true,然后将该true值与计算结果为false"aaa"进行比较。

为了正确,您可以编写:

const a = 'aaa';
const b = 'aaa';
const c = 'aaa';
console.log(a === b && b === c); //true

如果你把这些字符串存储在变量中,你可以这样做

let a = 'aaa', b = 'aaa', c = 'aaa'
console.log(a === b && b === c) // true

表达式'aaa'=='aaa'=='aaa'的计算结果为('aaa'=='aaa')=='aaa'

括号中的子表达式的计算结果为true并且它变得true=='aaa',这是false,因为当比较不同类型的两个值时,JavaScript 首先将其中一个或两个转换为通用类型。它将布尔true转换为数字1,将字符串'aaa'转换为显然不相等的数字0

你需要的是

console.log('aaa'=='aaa' && 'aaa'=='aaa')

您可以将所有值放在一个 Array 中,然后使用Array.prototype.every()函数来测试是否所有值都满足您传递给它的回调中定义的条件:

let a = 'aaa', b = 'aaa', c = 'aaa'
let arr = [a, b, c]
let arr2 = [1, 2, 1]
console.log(arr.every(i => [arr[0]].includes(i)))
console.log(arr2.every(i => [arr2[0]].includes(i)))

此外,您可能会从给定序列中获取唯一值,如果您获得单个元素是因为所有元素都相等:

const same = xs => new Set (xs).size === 1
const x = 'aaa'
const y = 'aaa'
const z = 'aaa'
const areSame = same ([ x, y, z ])
console.log(areSame)
const x_ = 'aaa'
const y_ = 'bbb'
const z_ = 'aaa'
const areSame_ = same ([ x_, y_, z_ ])
console.log (areSame_)

有可变参数

const same = (...xs) => new Set (xs).size === 1
const x = 'aaa'
const y = 'aaa'
const z = 'aaa'
const areSame = same (x, y, z)
console.log(areSame)
const x_ = 'aaa'
const y_ = 'bbb'
const z_ = 'aaa'
const areSame_ = same (x_, y_, z_)
console.log (areSame_)

最新更新