有一个由此引起的错误,虽然修复很容易,但(切换到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