簡體   English   中英

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和名稱,如01等。 字符串可以,因此join可以處理字符串。

從規范:

注 2: join函數是有意通用的; 它不要求它的this值是一個Array對象。 因此,它可以轉移到其他種類的對象中作為方法使用。

這是規范中的完整算法:

  1. be ToObject ( this value).ToObject值)。
  2. ). ReturnIfAbrupt ( )。
  3. be ToLength ( Get ( , "length" )).ToLength ( Get ( , "length" ))。
  4. ). ReturnIfAbrupt ( )。
  5. is undefined , let be the single-element String "," .如果未定義,則讓為單元素字符串","
  6. be ToString ( ).ToString)。
  7. ). ReturnIfAbrupt ( )。
  8. is zero, return the empty String.如果為零,則返回空字符串。
  9. be Get ( , "0" ).Get ( , "0" )。
  10. is undefined or null , let be the empty String;如果undefinednull ,則令為空字符串; be ToString ( ).否則,令ToString ( )。
  11. ). ReturnIfAbrupt ( )。
  12. be 1 .1
  13. < 重復,而 <
    1. be the String value produced by concatenating and .是通過連接產生的字符串值。
    2. be Get ( , ToString ( )).Get ( , ToString ( ))。
    3. is undefined or null , let be the empty String;如果undefinednull ,則讓為空字符串; be ToString ( ).否則,讓成為ToString ( )。
    4. ). ReturnIfAbrupt ()。
    5. be a String value produced by concatenating and .是通過連接產生的 String 值。
    6. by 1.增加 1。
  14. .返回

字符串是類似數組的對象,因為它具有屬性length ,並且您可以使用[]訪問其元素(字符),因為您可以對其應用大多數數組操作操作。

Function.prototype.call()調用給定函數的函數,使用第一個參數作為this並使用流參數作為普通參數。

作為那個Array.prototype.join.call(a, "-")將在你的情況下調用對象a上的函數join字符串。

字符串是類數組對象。 類數組對象提供對元素和屬性長度的索引訪問。 你可以在這里閱讀更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM