2017-07-15 19 views
1

在以下代碼中,編譯器(在'compile'時間)沒有提出關於groups.shift()的投訴,但抱怨depths.shift()不是函數。我對什麼是盲目的? (我試過重新命名depths,重新輸入等)爲什麼shift()在一個數組上不起作用,除非另一個在其他數組上工作

const tag1x = (elem, content, groups = ['?','?','?'], depths = ['?','?'], optional = true, level = 0) => { 
     let option = optional ? '?' : ''; 
     let template = ` 
      ${'\t'.repeat(level)}(${groups.shift()}:<$1[^>]*?DDD(${depths.shift()}:[0-9]+)[^>]*>)$3 
      ${'\t'.repeat(level)}(${groups.shift()}:$2) 
      ${'\t'.repeat(level)}(${groups.shift()}:</$1[^>]*?DDD(${depths.shift()}:[0-9]+)[^>]*>)$3 
      `; 
     return form(template, elem, content, option); 
    } 

但是,如果我用shift一般能正常工作的所有罪狀:以上

const tag1x = (elem, content, groups = ['?','?','?'], depths = ['?','?'], optional = true, level = 0) => { 
     let option = optional ? '?' : ''; 
     let template = ` 
      ${'\t'.repeat(level)}(${groups.shift()}:<$1[^>]*?DDD(${[].shift.call(depths)}:[0-9]+)[^>]*>)$3 
      ${'\t'.repeat(level)}(${groups.shift()}:$2) 
      ${'\t'.repeat(level)}(${groups.shift()}:</$1[^>]*?DDD(${[].shift.call(depths)}:[0-9]+)[^>]*>)$3 
      `; 
     return form(template, elem, content, option); 
    } 

是功能齊全。

回答

0

我誤讀了情況。錯誤發生在運行時,因此非常清楚,因爲字符串輸入而不是數組輸入。一個字符串輸入將被固定爲[].shift.call(myAccidentallyAString),當然,直接在字符串上調用的shift()不是函數。

它的行爲就像Array.isArray(myStuff) ? myStuff.shift() : [myStuff].shift(),這很有道理,因爲(我猜)myStuff被裝箱到一個對象,然後被shift()調用。

相關問題