我們知道岭洲,如果小程序data有一個(gè)列表如list,對(duì)其中某一項(xiàng)進(jìn)行賦值呼盆,語(yǔ)法如下:
this.setData({
????'list.itemName': something...//ps:之前寫(xiě)成'list[itemName]'也是可以的年扩,可前兩天試了下發(fā)現(xiàn)不行,只好修改此處
})
如果是在一個(gè)循環(huán)里依次對(duì)每一項(xiàng)進(jìn)行賦值访圃,該怎么寫(xiě)呢厨幻?
我相信一定有人這樣寫(xiě):
this.setData({
? ? 'list[i]':something...
})
然后就報(bào)錯(cuò)了,提示什么"必須為0-9"等等
這里你需要引入一個(gè)es6語(yǔ)法:反撇號(hào)`腿时。關(guān)于此語(yǔ)法我會(huì)放在最后簡(jiǎn)要解釋克胳。
由此,setData的格式就變成了:
this.setData({
? ? [`list[${i}]`]:something...
})
編譯通過(guò)圈匆!
然而我并沒(méi)太弄懂小程序關(guān)于這個(gè)的內(nèi)部機(jī)制……有木有人跟我來(lái)說(shuō)一下……
es6:反撇號(hào)`
模版字符串漠另。除了使用反撇號(hào)字符 ` 代替普通字符串的引號(hào) ' 或 " 外,它們看起來(lái)與普通字符串并無(wú)二致跃赚。它為JavaScript提供了簡(jiǎn)單的字符串插值功能
示例:
function authorize(user, action) {
?if (!user.hasPrivilege(action)) {
???throw new Error(
?????`用戶(hù) ${user.name} 未被授權(quán)執(zhí)行${action} 操作笆搓。`);
?}
}
在這個(gè)示例中性湿,${user.name}和${action}被稱(chēng)為模板占位符,JavaScript將把user.name和action的值插入到最終生成的字符串中满败。這算是比+ 運(yùn)算符更優(yōu)雅的語(yǔ)法肤频。
模板占位符中的代碼可以是任意JavaScript表達(dá)式,所以函數(shù)調(diào)用算墨、算數(shù)運(yùn)算等這些都可以作為占位符使用宵荒,你甚至可以在一個(gè)模板字符串中嵌套另一個(gè),我稱(chēng)之為模板套構(gòu)(template inception)净嘀。
如果這兩個(gè)值都不是字符串报咳,可以按照常規(guī)將其轉(zhuǎn)換為字符串。例如:如果action是一個(gè)對(duì)象挖藏,將會(huì)調(diào)用它的.toString()方法將其轉(zhuǎn)換為字符串值暑刃。
如果你需要在模板字符串中書(shū)寫(xiě)反撇號(hào),你必須使用反斜杠將其轉(zhuǎn)義:`\``等價(jià)于"`"膜眠。
同樣地岩臣,如果你需要在模板字符串中引入字符$和{。無(wú)論你要實(shí)現(xiàn)什么樣的目標(biāo)宵膨,你都需要用反斜杠轉(zhuǎn)義每一個(gè)字符:`\$`和`\{`架谎。
模板字符串可以多行書(shū)寫(xiě). 模板字符串中所有的空格、新行辟躏、縮進(jìn)谷扣,都會(huì)原樣輸出在生成的字符串中。