Javascript “为什么?”;[1,2],[3,4].indexOf([1,2])”;返回-1?

Javascript “为什么?”;[1,2],[3,4].indexOf([1,2])”;返回-1?,javascript,arrays,node.js,indexof,Javascript,Arrays,Node.js,Indexof,我花了一个半小时试图在我的代码中找到一个bug,当我最终意识到以下JavaScript代码: [[1, 2], [3, 4]].indexOf([1, 2]); 返回-1,即使是[1,2,3].indexOf(1)正确返回0 为什么会发生这种情况?我如何找到子数组的正确索引?indexOf只接受基本参数,您无法匹配: [1, 2] == [1, 2] 这显然给出了false,indexOf只接受基本参数,您无法匹配: [1, 2] == [1, 2] 这显然给出了false您可以迭代数组,

我花了一个半小时试图在我的代码中找到一个bug,当我最终意识到以下JavaScript代码:

[[1, 2], [3, 4]].indexOf([1, 2]);
返回
-1
,即使是
[1,2,3].indexOf(1)正确返回0


为什么会发生这种情况?我如何找到子数组的正确索引?

indexOf
只接受基本参数,您无法匹配:

[1, 2] == [1, 2]

这显然给出了
false

indexOf
只接受基本参数,您无法匹配:

[1, 2] == [1, 2]

这显然给出了
false

您可以迭代数组,检查模式的每一项并返回索引

函数getIndexOf(数组、模式){ var指数=-1; array.some(函数(a,i){ if(a.length!==图案长度){ 返回false; } if(a.every(函数(b,j){返回b==pattern[j];})){ 指数=i; 返回true; } }); 收益指数; }
log(getIndexOf([1,2],[3,4],[7,8],[7,8])您可以迭代数组,检查模式的每一项并返回索引

函数getIndexOf(数组、模式){ var指数=-1; array.some(函数(a,i){ if(a.length!==图案长度){ 返回false; } if(a.every(函数(b,j){返回b==pattern[j];})){ 指数=i; 返回true; } }); 收益指数; }
log(getIndexOf([1,2],[3,4],[7,8],[7,8])因为
[1,2]!==[1,2]
。在这里您可以找到更多比较数组的方法:因为
[1,2]!==[1,2]
。在这里,您可以找到更多比较数组的方法:
indexOf
执行
==
而不是
=
。现在试着向OP解释为什么
[42,NaN].indexOf(NaN)
返回
-1
:D@PraveenKumarindexOf只接受基元参数-
a=[1,2];[a[1,2]].indexOf(a)/=>0
@PraveenKumar Reference?MDN说:在JavaScript中,有6种基本数据类型:字符串、数字、布尔值、null、未定义、符号(ECMAScript 2015中新增)。你会把我的
a
放在哪里?@PraveenKumar String.prototype.indexOf!=Array.prototype.indexofy您当然可以将任何值传递给
Array#indexOf
,而不仅仅是原始值。
indexOf
执行
===
而不是
=
。现在试着向OP解释为什么
[42,NaN].indexOf(NaN)
返回
-1
:D@PraveenKumarindexOf只接受基元参数-
a=[1,2];[a[1,2]].indexOf(a)/=>0
@PraveenKumar Reference?MDN说:在JavaScript中,有6种基本数据类型:字符串、数字、布尔值、null、未定义、符号(ECMAScript 2015中新增)。你会把我的
a
放在哪里?@PraveenKumar String.prototype.indexOf!=Array.prototype.indexofy您当然可以将任何值传递给
Array#indexOf
,而不仅仅是原语值。或者可以使用.join(“”)代替JSON.stringify(a)或使用.join(“”)代替JSON.stringify(a)