gpt4 book ai didi

javascript - js中三元等于比较和数组长度

转载 作者:行者123 更新时间:2023-11-28 10:09:08 24 4
gpt4 key购买 nike

最后我浏览了一下Underscore.js代码来学习 JavaScript 习惯用法,我发现了以下 each 函数的定义:

var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};

这条线是做什么用的? (我认为这是检查传递的对象是否是数组的一种方法,对吗?如果是这样,typeof 运算符不是更好的方法吗?)

obj.length === +obj.length

最佳答案

each 方法接受集合(数组或对象)。

在检查 native 方法 forEach 是否可用后,该方法检查 obj 是否为数组。使用 typeof 是不可能的,因为 typeof 对于数组和对象都会返回 "object" (尝试 typeof [] === typeof {})。因此,他们使用了 obj.length === +obj.length 方法。

这是有效的,因为如果 obj 没有 length 属性,+obj.length 返回 NaN并且严格比较失败。然后,该方法假设 obj 是一个 object

关于javascript - js中三元等于比较和数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com