join()可控灵活,支持自定义分隔符、保留undefined/null原字符串、递归处理嵌套数组;toString()固定用逗号分隔、转undefined/null为空串、仅扁平化一层且可能受元素toString重写影响。

JavaScript中,join() 和 toString() 都能把数组转成字符串,但行为和用途有明显区别:前者可控、灵活,后者简单、固定。
分隔符控制:join支持自定义,toString固定用逗号
join() 允许传入任意字符串作为分隔符;不传参时默认用空字符串连接(即无分隔)。toString() 始终用英文逗号加一个空格(实际是逗号,无空格)分隔元素,且无法修改。
-
[1, 2, 3].join('-')→"1-2-3" -
[1, 2, 3].join('')→"123" -
[1, 2, 3].toString()→"1,2,3"(注意:没有空格)
对undefined和null的处理:join保留原值,toString统一转为空字符串
join() 会把 undefined 和 null 转为字符串 "undefined" 和 "null";toString() 则将二者都转为空字符串 ""。
-
[1, undefined, null].join('|')→"1|undefined|null" -
[1, undefined, null].toString()→"1,, "(注意中间两个逗号之间是空串)
对嵌套数组的处理:join会递归调用toString,toString只展开一层
join() 在遇到嵌套数组时,会自动对每个子数组调用其 toString() 方法;而 toString() 对数组本身只做一层扁平化(即调用每个元素的 toString()),不会深度递归。
立即学习“Java免费学习笔记(深入)”;
-
[[1,2], [3,4]].join('-')→"1,2-3,4"(子数组被转为"1,2"和"3,4") -
[[1,2], [3,4]].toString()→"1,2,3,4"(等价于[1,2,3,4].toString())
类型安全与兼容性:toString可能触发意外转换,join更明确
toString() 是对象的原型方法,若数组元素重写了 toString()(比如 Date、自定义类),结果可能不符合预期;join() 更“务实”,只做字符串拼接,逻辑清晰,适合明确需要格式化输出的场景。
-
[new Date('2020-01-01'), 42].toString()→"Thu Jan 01 2020 00:00:00 GMT+0800 (CST),42" -
[new Date('2020-01-01'), 42].join('|')→"Thu Jan 01 2020 00:00:00 GMT+0800 (CST)|42"










