2016-06-11 9 views
2

コード仕様で配列/文字列のlastIndexOf矛盾した結果

[3, 1, 3].lastIndexOf(3) 
2 
[3, 1, 3].lastIndexOf(3, undefined) 
0 // wtf? 

//ok, lets compare with string 

'313'.lastIndexOf(3) 
2 
'313'.lastIndexOf(3, undefined) 
2 //wow! 
+0

'Number(undefined)' => 'NaN'; '[3,1,3]。lastIndexOf(3、NaN);' => '0'。だから私は、 'from-index'の解析に失敗した場合に意図的なエラーでなければならないと仮定します。なぜそれは明らかに「0」(結果ではなく「from-index」) 。 –

答えて

3

異なるアルゴリズムを説明する自己です。

一つはNaNため0を代入した、提供された場合Array versionがその第2パラメータにToInteger()を行います。

  1. fromIndexの引数が渡された場合、nはToInteger(fromIndex)となります。そうでなければ、nをlen-1とする。

String versionは代替なしNaNが返されており、一方が提供されたか否かにかかわらず、その第二パラメータにToNumber()を使用するため、アルゴリズムは、手動NaNためInfinityを代入します。

  1. numPosをToNumber(位置)とします。 (positionが未定義の場合、このステップは値NaNを生成します)。
  2. ReturnIfAbrupt(numPos)。
  3. numPosがNaNの場合、posを+∞とします。そうでなければ、posをToInteger(numPos)とする。
  4. 、我々は唯一の推測できる理由として

が、Arrayバージョンは2 (ES5)の新しいですので、彼らはNaNに置き換えされたほうが良いだろうと判断している必要があります0、それは少なくともそれを考慮して少し意味をなさない評価(必ずしもそれは関係ない)

+0

indexOfメソッドでは意味がありますが、lastIndexOfでは意味がありません。 – kemsky

関連する問題