4

javascriptでは、Arrayインスタンスには2つのメソッドがあります。

[].indexOf(searchvalue [,start])

[].lastIndexOf(searchvalue [,start])

「開始」パラメータが未定義の場合、は奇妙な動作をします。

[1,2,3].lastIndexOf(2) // 1
[1,2,3].lastIndexOf(2,undefined) // -1
[1,2,3].indexOf(2,undefined) // 1

これはchromeとfirefoxで発生するため、indexOfとlastIndexOfの理論は「未定義」を異なる方法で処理します。

4

3 に答える 3

4
array.lastIndexOf(searchElement[, fromIndex])

fromIndex逆方向検索を開始するインデックス。デフォルトは配列の長さです。つまり、配列全体が検索されます。インデックスが配列の長さ以上の場合、配列全体が検索されます。負の場合、配列の終わりからのオフセットと見なされます。インデックスが負の場合でも、配列は後ろから前に検索されることに注意してください。計算されたインデックスが0未満の場合、-1が返されます。つまり、配列は検索されません。

[1,2,3].lastIndexOf(2,undefined)と同じ[1,2,3].lastIndexOf(2, 0)であるため、最初の要素のみが検索されます。

[1,2,3].lastIndexOf(2, 0)を返し-1ます。

[1,2,3].lastIndexOf(1, 0)を返し0ます。

于 2012-08-13T06:13:42.993 に答える
2

array.indexOf()指定されたポイントでテストを開始し、指定された値に一致する配列要素が見つかるまで先に進みます。したがって、を使用している場合は[1,2,3].indexOf(2,undefined)、インデックス0(にundefined変換される)の配列要素から開始し、各要素のテストに進みます。

2 == 1 // false
2 == 2 // true, returns index 1

array.lastIndexOf()ただし、指定されたポイントから逆方向にテストを開始します。したがって、を使用している場合[1,2,3].lastIndexOf(2,undefined)、Javascriptはインデックス0の配列要素から開始し、その後、逆方向に続行しようとします。

2 == 1 // false, no more elements to test, return -1
于 2012-08-13T06:18:49.217 に答える
-1

これは、配列lastIndexOfの標準実装です。Javascript配列lastIndexOf()メソッド

ご了承ください:

var from = Number(arguments[1]);
if (isNaN(from))
{
  from = len - 1;
}
else
{
  from = (from < 0)
       ? Math.ceil(from)
       : Math.floor(from);
  if (from < 0)
    from += len;
  else if (from >= len)
    from = len - 1;
}

最初fromは0に等しいと思いましたが、実際はNaNです。考えられる結論は、mozillaまたはwebkitの実装はあなたが望むものではないということです

別のリンク-JavascriptArrayindexOf()メソッド

あなたはそれを直接使用するのを見ることができます

    var from = Number(arguments[1]) || 0;
于 2012-08-13T06:15:15.843 に答える