代码之家  ›  专栏  ›  技术社区  ›  xRobot

如何用这种方法比较3个值?[副本]

  •  1
  • xRobot  · 技术社区  · 6 年前

    我需要一种方法来比较3个值在一个简短的方式如下:

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

    但正如你所见,这是行不通的。为什么?

    'aaa'=='aaa'
    true
    
    5 回复  |  直到 6 年前
        1
  •  1
  •   Franceso Russo    6 年前

    表达式 'aaa'=='aaa'=='aaa' 评估为 ('aaa'=='aaa')=='aaa' .

    括号中的子表达式的计算结果为 true 它变成了 true=='aaa' 哪个是 false converts one of them or both to a common type . 它转换布尔值 到号码 1 'aaa' 到号码 0 很明显,这两个数字是不相等的。

    console.log('aaa'=='aaa' && 'aaa'=='aaa')
        2
  •  4
  •   Artem Arkhipov user1682140    6 年前

    比较前两个值的结果为 true 是的 与…相比 "aaa" 其计算结果为 false .

    要使其正确,您可以写:

    const a = 'aaa';
    const b = 'aaa';
    const c = 'aaa';
    
    console.log(a === b && b === c); //true
        3
  •  2
  •   Franceso Russo    6 年前

    let a = 'aaa', b = 'aaa', c = 'aaa'
    
    console.log(a === b && b === c) // true
        4
  •  0
  •   connexo    6 年前

    可以将所有值放入一个数组中,然后使用 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)))
        5
  •  0
  •   Matías Fidemraizer    6 年前

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

    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_)