【问题标题】:Why includes() behaves this way in js?为什么 include() 在 js 中会这样?
【发布时间】:2020-02-25 19:14:18
【问题描述】:
a=[1,2,3,4]
console.log(a.includes(4 || 5); //this yields true
console.log(a.includes(5 || 4); //this yields false

为什么函数 includes() 会以这种特殊方式运行?

【问题讨论】:

    标签: javascript arrays include


    【解决方案1】:

    includes 只取一个值。您可能认为您是在告诉它检查两件事,但事实并非如此。 || 运算符将比较两个操作数并解析为单个值。如果|| 的左侧是"truthy",那么将使用它。

    简而言之:4 || 54 没有区别,5 || 45 没有区别。所以你的第一行检查a 是否包含4,第二行检查它是否包含5

    如果您需要检查多个值,要么调用包含多次,要么使用不同的方法,如.find

    const a = [1,2,3,4];
    const element = a.find(val => val === 4 || val === 5);
    const found = !!element; // turning it into true/false instead of 4/5/undefined
    console.log(found);

    【讨论】:

      【解决方案2】:

      a=[1,2,3,4]

      console.log(a.includes(4 || 5)); //这个结果为真

      4 || 5 将首先执行。结果是4

      4 包含在a 中,结果为true

      console.log(a.includes(5 || 4)); //这会产生错误

      5 || 4 导致5

      5 不包含在a 中,结果为false

      函数includes() 的行为应有尽有。


      我猜混乱来自这部分:

      4 || 5 = 4
      
      5 || 4 = 5
      

      例如:X ||是的

      如果 X 未定义,则结果为 Y

      如果定义了 X,结果将是 X

      在您的两个示例中,"X" 都是用数字定义的。结果果然是第一个数字。


      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        • 2011-06-03
        • 2018-06-08
        相关资源
        最近更新 更多