我最近偶然发现了一个由javascript中的.includes()
方法引起的错误。我想返回不区分大小写的确切结果,但由于某种原因,这不起作用
["Ford", "BMW", "Fiat"].includes("bmw");
//returns false
//expected result true
然后在.find()
的帮助下修复了我的问题,如下所示:
!!["Ford", "BMW", "Fiat"].find(el => el.toUpperCase() === "bmw".toUpperCase());
//returns true
有人能帮我理解为什么includes
在大小写不敏感的情况下不工作吗?
为什么不区分大小写?引用MDN:
includes()
方法判断数组的条目中是否包含某个值,并根据需要返回true或false。[…]注意:从技术上讲,includes()使用sameValueZero
算法来确定是否找到给定的元素。
sameValueZero
定义为Object.is
,但+0
和-0
相等。
既然如此,我们可以试试:
> Object.is("bmw", "BMW")
false
> Object.is("bmw", "bmw")
true