我今天在Chrome和Node.js运行时都遇到了意外行为。
var x = 'I am a string';
console.log(x[0]); //String 'I'
console.log(x[0][0]); //String 'I'
console.log(x[0][0][0]); //String 'I'
我意识到通过括号访问字符串索引不是首选,也不是普遍支持的,所以我的兴趣纯粹是好奇心之一。这对我来说意味着字符串是由字符串构建的 - 也就是说,字符'I'本身就是一个字符串'I'在索引0处的字符串,它本身就是一个字符串...它一直是乌龟
或者这似乎暗示我webkit只是构建一个新的字符串对象,每当我在现有字符串上使用[]符号时返回给我。这两个结论对我来说都很奇怪。
他们中的任何一个是否正确?当我拨打x [0]时,幕后发生了什么?
编辑:与以下答案相关: Are strings object?
答案 0 :(得分:1)
JavaScript中没有“字符”数据类型。字符串的一部分可以是一个字符串。
请注意,字符串不是对象。字符串是原始值。
使用[]
访问字符串的部分首先涉及在String实例中隐式包装字符串值(导致对象实例)。 []
运算符应用于那个对象,得到结果(字符串),然后丢弃包装器。 (由于包装器对象是短暂的,因此允许运行时以实际上以这种方式实现语义。)