gpt4 book ai didi

javascript - 了解 obj 检查中的 javascript(长度 - 1)以测试 isArray 之类的(jquery)

转载 作者:行者123 更新时间:2023-11-30 16:46:00 26 4
gpt4 key购买 nike

我刚刚浏览了 jquery 的源代码并遇到了以下函数:

function isArraylike( obj ) {

// Support: iOS 8.2 (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE
var length = "length" in obj && obj.length,
type = jQuery.type( obj );

if ( type === "function" || jQuery.isWindow( obj ) ) {
return false;
}

if ( obj.nodeType === 1 && length ) {
return true;
}

return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}

如果你逐行查看,你会看到 jquery 的内部方法被调用,例如 $.type$.isWindow,现在我没有调用的部分明白就在最后,就是下面这段代码:

( length - 1 ) in obj;

我看到最后使用了&&,我唯一的问题是这个检查什么时候返回true,什么时候返回false?真的很难说,是只检查 obj 是对象还是 obj 是数组?

really really 检查的目的是什么?

我创建了下面的一段代码,来理解这一行:

arr = ['hello' , 'world'];

check = (arr - 1) in arr;

console.log(check);

好吧,我在控制台中得到一个 false,我不知道什么情况会返回 true。有人可以对此有所了解吗?

最佳答案

这个很简单但是和jquery无关。那只是javascript。它检查键是否是对象或数组的一部分。

var a=["a","b","c","d"]

至少有四个键 0、1、2 和 3,因此您可以肯定地测试所有这些键,即在控制台中

0 in a
true
1 in a
true
2 in a
true
3 in a
true
4 in a
false

因此 (length-1) in obj 检查数组或对象的最后一个元素是否已定义。

这就完成了,因为您可以将 a 定义为

var a={ "0":"a", "3":"d", "length":4 }

这将是一个稀疏数组。

你的测试代码是

arr = ['hello' , 'world'];
check = (arr.length - 1) in arr;
console.log(check);

关于javascript - 了解 obj 检查中的 javascript(长度 - 1)以测试 isArray 之类的(jquery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231994/

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