为何new Array(256).join(' ')返回255个空格而非256个?
为什么
new Array(256).join(' ') 返回255个空格? 这事儿得从两个核心点拆解清楚:Array 构造函数的行为,以及 join() 方法的工作逻辑。
先看
new Array(256)到底创建了什么
当你给Array构造函数传单个数字参数时,它会生成一个长度为该数字的稀疏数组——也就是说,这个数组的length属性是256,但索引0到255的位置都是空槽,没有实际赋值的元素。再聊
join(' ')的拼接规则join()方法的本质是把数组里的所有元素用指定分隔符串成字符串,而它的核心规律是:分隔符的出现次数 = 数组中有效元素的数量 - 1。
对于这个长度为256的稀疏数组,join()会把每个空槽当作undefined处理,而undefined在拼接时会被转为空字符串。相当于你有256个空字符串要拼接,那需要的空格分隔符数量就是256 - 1 = 255个。
用个简单例子验证下:
// 长度为3的数组,join后分隔符出现2次 console.log(new Array(3).join('x')); // 输出 "xx"
这下就能明白为啥结果是255个空格啦~
内容的提问来源于stack exchange,提问作者Ann Pavlov
相关产品推荐
相关产品推荐

