通过[]访问的字符串的字符是字符串?
Characters of strings accessed through [] are strings?
我 运行 今天在 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 只是构建一个新的字符串对象 return 返回给我。这两个结论对我来说都很奇怪。
他们都正确吗?当我调用 x[0] 时,幕后发生了什么?
编辑:与以下答案相关: Are strings object?
JavaScript 中没有 "character" 数据类型。字符串的一部分可以是字符串。
请注意,字符串不是对象。字符串是原始值。
使用 []
访问部分字符串涉及首先将字符串值隐式包装在 String 实例中(产生对象实例)。 []
运算符应用于 that 对象,你得到结果(一个字符串),然后包装器被丢弃。 (由于包装器对象是短暂的,因此允许运行时偷偷摸摸地实际以这种方式实现语义。)
我 运行 今天在 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 只是构建一个新的字符串对象 return 返回给我。这两个结论对我来说都很奇怪。
他们都正确吗?当我调用 x[0] 时,幕后发生了什么?
编辑:与以下答案相关: Are strings object?
JavaScript 中没有 "character" 数据类型。字符串的一部分可以是字符串。
请注意,字符串不是对象。字符串是原始值。
使用 []
访问部分字符串涉及首先将字符串值隐式包装在 String 实例中(产生对象实例)。 []
运算符应用于 that 对象,你得到结果(一个字符串),然后包装器被丢弃。 (由于包装器对象是短暂的,因此允许运行时偷偷摸摸地实际以这种方式实现语义。)