Swift中init(repeating:count)是否应按引用方式工作?
数组构造器传入字符串后元素值不符合预期的问题解析
你碰到的这个问题其实是JavaScript数组构造器的特殊行为导致的,并不是创建了两个String对象哦。
当你使用new Array("string")来创建数组时,引擎会把传入字符串的长度值作为数组的初始长度,而不是把这个字符串作为数组的第一个元素。因为"string"的长度是6,所以你实际上创建了一个长度为6的空数组(所有元素默认是undefined,打印出来看起来像是空字符串),这就是为什么a[1]的结果和你预期不符。
想要实现把同一个字符串引用放入数组的多个位置,正如你补充提到的,可以用下面这些方式:
- 直接使用数组字面量定义:
const a = ["string", "string"];
- 先创建指定长度的数组,再手动赋值(确保指向同一个字符串引用):
const strRef = "string"; const a = new Array(2); a[0] = strRef; a[1] = strRef;
这两种方式下,数组的两个元素都会指向同一个String对象(JavaScript中字符串是不可变的,引擎会自动缓存相同的字符串值,所以不用担心会创建多个对象)。
内容的提问来源于stack exchange,提问作者Nisba
相关产品推荐
相关产品推荐

