Lodash:_.has()为_.range()中的最后一个元素返回false



有一个由此引起的错误,虽然修复很容易,但(切换到r.includes()(我不知道为什么会发生这种情况。

import _ from 'lodash';
console.log("TEST");
var r = _.range(1, 10 + 1);
console.log("_.range(1, 11):    " + r);
console.log("Array.isArray(r):  " + Array.isArray(r));
console.log("_.has(r, 2):       " + _.has(r, 2));
console.log("_.has(r, 20):      " + _.has(r, 20));
console.log("_.has(r, 10):      " + _.has(r, 10)); // ???
console.log("x.includes(10):    " + r.includes(10));

中的结果

TEST 
_.range(1, 11):    1,2,3,4,5,6,7,8,9,10 
Array.isArray(r):  true 
_.has(r, 2):       true 
_.has(r, 20):      false 
_.has(r, 10):      false 
x.includes(10):    true 

为什么_.has(r, 10)会导致false?这是一个bug还是我只是不明白什么?

虽然lodash将数组中的值设置为1-10(由_.range(1, 10 + 1)设置(,但底层JS数组的键仍然基于0。

您正在有效地创建:[1,2,3,4,5,6,7,8,9,10]

_.has检查路径是否存在,在这种情况下是在寻找r[10],但在上面的数组中,最后一个有效索引是r[9](因为它是基于0的(,所以它返回false

(同样,如果你做_.has(r, 0),你会看到true(

has用于检查对象的直接属性。您要检查的是:如果此数组包含一个值。这是由Array方法回答的:includes

参考

Lodash文档中的has

最新更新