我们知道,如果小程序data有一个列表如list,对其中某一项进行赋值,语法如下:
this.setData({
'list.itemName': something...//ps:之前写成'list[itemName]'也是可以的,可前两天试了下发现不行,只好修改此处
})
如果是在一个循环里依次对每一项进行赋值,该怎么写呢?
我相信一定有人这样写:
this.setData({
'list[i]':something...
})
然后就报错了,提示什么"必须为0-9"等等
这里你需要引入一个es6语法:反撇号`。关于此语法我会放在最后简要解释。
由此,setData的格式就变成了:
this.setData({
[`list[${i}]`]:something...
})
编译通过!
然而我并没太弄懂小程序关于这个的内部机制……有木有人跟我来说一下……
es6:反撇号`
模版字符串。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与普通字符串并无二致。它为JavaScript提供了简单的字符串插值功能
示例:
function authorize(user, action) {
if (!user.hasPrivilege(action)) {
throw new Error(
`用户 ${user.name} 未被授权执行${action} 操作。`);
}
}
在这个示例中,${user.name}和${action}被称为模板占位符,JavaScript将把user.name和action的值插入到最终生成的字符串中。这算是比+ 运算符更优雅的语法。
模板占位符中的代码可以是任意JavaScript表达式,所以函数调用、算数运算等这些都可以作为占位符使用,你甚至可以在一个模板字符串中嵌套另一个,我称之为模板套构(template inception)。
如果这两个值都不是字符串,可以按照常规将其转换为字符串。例如:如果action是一个对象,将会调用它的.toString()方法将其转换为字符串值。
如果你需要在模板字符串中书写反撇号,你必须使用反斜杠将其转义:`\``等价于"`"。
同样地,如果你需要在模板字符串中引入字符$和{。无论你要实现什么样的目标,你都需要用反斜杠转义每一个字符:`\$`和`\{`。
模板字符串可以多行书写. 模板字符串中所有的空格、新行、缩进,都会原样输出在生成的字符串中。
网友评论