![](/img/trans.png)
[英]Why can't I use Array.join.call in place of Array.prototype.join.call
[英]What does Array.prototype.join.call do in the background for a string?
var a = "foo";
var c = Array.prototype.join.call( a, "-" ); // 'f-o-o'
第二行代码是如何工作的? 我没有看到将字符串转换为数组然后再次转换回来,这是在后台发生的吗? 我遇到过这种代码,很奇怪,一个接受字符串的数组方法。
请参阅Array.prototype.join
的规范(如下) 。 它不要求它操作的this
是一个数组,只需要它有一个length
和名称,如0
、 1
等。 字符串可以,因此join
可以处理字符串。
从规范:
注 2:
join
函数是有意通用的; 它不要求它的this
值是一个Array
对象。 因此,它可以转移到其他种类的对象中作为方法使用。
这是规范中的完整算法:
"length"
)).设为ToLength ( Get ( , "length"
))。","
.如果未定义,则让为单元素字符串","
。"0"
).让为Get ( , "0"
)。1
.让为1
。字符串是类似数组的对象,因为它具有属性length
,并且您可以使用[]
访问其元素(字符),因为您可以对其应用大多数数组操作操作。
Function.prototype.call()
调用给定函数的函数,使用第一个参数作为this
并使用流参数作为普通参数。
作为那个Array.prototype.join.call(a, "-")
将在你的情况下调用对象a
上的函数join
字符串。
字符串是类数组对象。 类数组对象提供对元素和属性长度的索引访问。 你可以在这里阅读更多
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.