string.charAt()在传递字符串作为参数时如何工作?

时间:2011-11-13 14:52:10

标签: javascript string

根据the MDN JS DoccharAt方法接受integer并返回索引处的字符。并且

  

如果您提供的索引超出范围,JavaScript将返回一个空字符串。

我发现它也需要string作为参数,返回值很有趣。

示例代码:http://jsfiddle.net/yangchenyun/4m3ZW/

var s = 'hey, have fun here.'
>>undefined
s.charAt(2);
>>"y" //works correct
s.charAt('2');
>>"y" //This works too
s.charAt('a');
>>"h" //This is intriguing

有没有人知道这是怎么发生的?

1 个答案:

答案 0 :(得分:9)

该规范中的Section 15.5.4.4描述了该算法。在那里,您将看到(pos是传递给charAt的参数):

  

(...)
  3.让位置为ToInteger( pos )   (...)

Section 9.4中描述了

ToInteger

  
      
  1. number 成为在输入参数上调用ToNumber的结果。
  2.   
  3. 如果数字 NaN ,请返回 +0
      (...)
  4.   

'a'不是数字字符串,因此无法转换为数字,因此ToNumber将返回NaN(请参阅Section 9.3.1),然后生成{{1} }}

另一方面,如果您传递有效的数字字符串,例如0'2'会将其转换为相应的数字ToNumber


底线:

2s.charAt('a')相同,因为s.charAt(0)无法转换为整数。