2017-07-15 76 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()调用。

相关问题