在下面的代码中,编译器(在'compile'时间)没有抱怨groups.shift()
,但抱怨depths.shift()
不是函数。我对什么视而不见? (我尝试重命名depths
,重新输入等等。)
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 :(得分:0)
我误解了这种情况。错误发生在运行时,因此非常清楚,因为字符串输入而不是数组输入。字符串输入将由[].shift.call(myAccidentallyAString)
修复,而当然,直接在字符串上调用shift()
不是函数。
它的作用类似于Array.isArray(myStuff) ? myStuff.shift() : [myStuff].shift()
,这是有道理的,因为(我猜)myStuff
被装箱到一个对象,然后由shift()
调用。