gpt4 book ai didi

javascript - 数组相等性检查算法在某些情况下不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:14 26 4
gpt4 key购买 nike

我有一段代码可以检查数组是否相等。像这样使用它时它就像一个魅力:

[1, 2, 3].equals([1, 2, 3]); // true
[1, 2, 3].equals([1, 2, 4]); // false

当然,上面的结果是显而易见和正确的。但是,以下情况失败:

[1, 2, undefined].equals([1, 2, undefined]);
// Error: Cannot read property 'equals' of undefined

可能是什么原因造成的?我在使用它之前检查它是否具有该属性(if(this[i].equals)),为什么它会这样说? undefined === undefined 也是真的,所以我看不出有什么问题。

函数:

Array.prototype.equals = function(arr) {
if (this.length !== arr.length) {
return false;
}

for (var i = 0; i < arr.length; i++) {
if (this[i].equals) {
if (!this[i].equals(arr[i])) {
return false;
} else {
continue;
}
}

if (this[i] !== arr[i]) {
return false;
}
}

return true;
}

最佳答案

这一行:

    if (this[i].equals) {

应该是:

    if (this[i] && this[i].equals) {

因此,如果 this[i]undefined,您将不会尝试访问 undefined 上的属性。


编辑: 由于您似乎在测试数组,因此进行更明确的测试会更安全,因为任何对象都可能具有 .equals 属性.

您可能想这样做:

if( Object.prototype.toString.call( this[i] ) === '[object Array]' ) {

它有点长,但会准确地检测到数组,即使它是使用 new 关键字创建的,这会抛出 typeof 运算符。

关于javascript - 数组相等性检查算法在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978444/

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