为什么JavaScript的Set对象会拆分传入的字符串参数?
Set构造函数接收字符串自动拆分字符的底层逻辑
Set构造函数的设计本身就支持传入可迭代对象作为初始化参数,构造实例的过程中会自动遍历传入的可迭代对象,把每次遍历得到的元素逐个添加到Set实例中。- 字符串是JavaScript内置的可迭代对象,它的默认迭代行为就是按Unicode码位逐个返回单个字符,比如
"123"迭代时会依次返回'1'、'2'、'3'三个值。
你可以通过
for...of循环直接验证字符串的迭代特性:for (const char of "123") { console.log(char) // 依次打印 '1'、'2'、'3' }
- 除了字符串之外,数组、Map、Generator函数返回值等所有实现了Symbol.iterator接口的对象,都可以作为Set构造函数的入参,处理逻辑完全一致:Set内部会自动调用参数的Symbol.iterator方法获取迭代器,遍历得到所有元素后存入实例。
- 你给出的示例代码本质上等价于下面的写法:
const set = new Set(); for (const char of "123") { set.add(char); } console.log(set); // Set { '1', '2', '3' }
内容的提问来源于stack exchange,提问作者user15392855
相关产品推荐
相关产品推荐

