Javascript 使用带数字键的对象渲染u0.template

Javascript 使用带数字键的对象渲染u0.template,javascript,underscore.js,Javascript,Underscore.js,使用下划线.js的模板方法遇到了一些奇怪的行为: var test = ['first', 'test']; console.log(_.template('this is a <%= 1 %> ', test)); var-test=['first','test']; console.log(u.template('this is a',test'); (小提琴:) 此代码段输出:“这是一个1”,而预期结果是“这是一个测试” 不会抛出任何错误。我已经研究了这个结果,但没有明显的

使用下划线.js的
模板
方法遇到了一些奇怪的行为:

var test = ['first', 'test'];
console.log(_.template('this is a <%= 1 %> ', test));
var-test=['first','test'];
console.log(u.template('this is a',test');
(小提琴:)

此代码段输出:“这是一个1”,而预期结果是“这是一个测试”

不会抛出任何错误。我已经研究了这个结果,但没有明显的解释。要求我只在模板中使用插值。我已经尝试过使用
\ux.extend({},test)
将数组显式转换为集合,但没有骰子


如何才能使其正常工作?

数字不是有效的javascript引用

在这里,您可能想这样写:

如果不起作用,则将数组传递给对象键:

_.template('this is a <%= list[1] %> ', { list: test })
\uu0.template('这是一个',{list:test})

数字不是有效的javascript引用

在这里,您可能想这样写:

如果不起作用,则将数组传递给对象键:

_.template('this is a <%= list[1] %> ', { list: test })
\uu0.template('这是一个',{list:test})

您可以使用以下方法检查编译的模板代码:

_.template('this is a <%= 1 %> ').source
关键部分是:

with(obj){
  (1)
}
因为1不是有效的属性/变量名,所以它不会尝试匹配您正在模板化的对象的属性,所以只需打印出“1”

如果要使用像
{zero:'first',one:'test'}
这样的对象和
'这是一个'
的模板,那么这看起来像:

with(obj){
  (one)
}

这相当于对象1。您可以使用以下方法检查编译的模板代码:

_.template('this is a <%= 1 %> ').source
关键部分是:

with(obj){
  (1)
}
因为1不是有效的属性/变量名,所以它不会尝试匹配您正在模板化的对象的属性,所以只需打印出“1”

如果要使用像
{zero:'first',one:'test'}
这样的对象和
'这是一个'
的模板,那么这看起来像:

with(obj){
  (one)
}

这相当于
obj.one

函数需要的是一个对象,而不是数组。@Jack当我显式地将其转换为一个对象时,我得到了相同的结果(如问题中所述)。请参阅fiddle以了解特定的示例。函数需要一个对象,不是数组。@Jack当我显式地将其转换为对象时,我得到了相同的结果(如问题中所述)。请参阅fiddle以了解具体的示例。
不起作用,而第二个代码段起作用。虽然它不是有效的引用,但我认为(可能希望如此)它将尝试通过括号表示法从集合中检索值,在这种情况下,
test[1]
是有效的。
1
是有效的表达式,
包装表达式。
不起作用,而第二个代码段起作用。虽然它不是有效的引用,但我认为(可能希望如此)它将尝试通过括号表示法从集合中检索值,在这种情况下,
test[1]
是有效的。
1
是有效的表达式,
包装表达式。