"abc"[0]这种取值原理是什么?

function xxx(){
    return "abc"[0];
}
document.write(xxx());

返回是a,当然你也可以使用console.log看下,只是想搞清楚原理。[]不是对数组取值的么,string number也可以?为什么?

阅读 3.6k
5 个回答
"abc"[0]

隐式地

new String('abc')[0]

这个过程就和使用

'abc'.charAt(0)

一般。

MDN
Dangerous Bracket Notation for Strings

从 MDN 的描述可以看出,这是个 ECMAScript5 的 feature,所以就是个语法,没有为什么
  
不过这种方法不支持 IE7,而且又不能这样子用:

var a = 'abc';
a[0] = 'z' // 没有任何反应,严格模式也如此

所以还是用 charAt 的好。

新手上路,请多包涵

这里是把字符串堪称类数组对象了

新手上路,请多包涵

如果涉及计算机底层原理的话,其实各种编程语言实现字符串的内部原理都是类似的。拿C语言来说,一个字符占用一个字节,字符串的实现则是一个带结尾标记符的字符数组,也就是说,比如一个"abc"的字符串,编译的时候,会把这个字符串编译为一个有四个元素的数组:a[0] = 'a',a[1] = 'b',a[2] = 'c',a[3] = '\0'。其中\0表明字符串的结束,JavaScript底层原理也差不多吧~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题