var a = "foo";
var c = Array.prototype.join.call( a, "-" ); // 'f-o-o'
第二行代码是如何工作的?我没有看到将字符串转换为数组然后再次转换回来,这是在后台发生的吗?我遇到过这种代码,很奇怪,一个接受字符串的数组方法。
最佳答案
参见 specification for Array.prototype.join
(下)。它不要求它操作的 this
是一个数组,只需要它有一个 length
和名称如 0
、1
,依此类推。字符串可以,因此 join
可以处理字符串。
来自规范:
NOTE 2 The
join
function is intentionally generic; it does not require that itsthis
value be anArray
object. Therefore, it can be transferred to other kinds of objects for use as a method.
这是规范中的完整算法:
- 设O为ToObject (这个值)。
- ReturnIfAbrupt (O).
- 设len为ToLength ( Get (O,
"length"
)). - ReturnIfAbrupt (len).
- 如果separator undefined,令separator为单元素字符串
","
。< - 设sep为ToString (分隔符)。
- ReturnIfAbrupt (9月)。
- 如果 len 为零,则返回空字符串。
- 设element0为Get (O,
“0”
)。 - 如果element0是undefined或null,令R为空字符串;否则,设 R 为 ToString (元素 0)。
- ReturnIfAbrupt (R).
- 设 k 为
1
。 - 重复,同时 k <len
- 令 S 为通过连接 R 和 sep 产生的字符串值。
- 设元素为Get (O,ToString(k))。
- 如果element是undefined或null,让next为空字符串;否则,让 next 为 ToString (元素)。
- ReturnIfAbrupt (下一个)。
- 设 R 是通过连接 S 和 next 产生的字符串值。
- 将 k 增加 1。
- 返回R。
关于javascript - Array.prototype.join.call 在后台为字符串做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33981796/