【发布时间】: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
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
includes 只取一个值。您可能认为您是在告诉它检查两件事,但事实并非如此。 || 运算符将比较两个操作数并解析为单个值。如果|| 的左侧是"truthy",那么将使用它。
简而言之:4 || 5 与 4 没有区别,5 || 4 与 5 没有区别。所以你的第一行检查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);
【讨论】:
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" 都是用数字定义的。结果果然是第一个数字。
希望对你有帮助:)
【讨论】: