如何将数组以字符串元素形式传入函数?(语法错误:Unexpected token '&')
问题
我尝试将imageSrcs数组以带引号的元素形式传入函数,但始终无法实现,还报错:Uncaught SyntaxError: Unexpected token '&'。想要达到的目标效果是:
initializeSlider($(".slider-1"), ["data:xxxxxxxxxxxxx", "data:xxxxxxxxxxxxx", "data:xxxxxxxxxxxxx"]);
我的代码示例如下:
<% for (let i = 0; i < posts.length; i++) { let imageSrcs = []; for (let j = 0; j < posts[i].images.length; j++) { let imageSrc = '"' + `data:image/${posts[i].images[j].image.contentType};base64, ${posts[i].images[j].image.data.toString('base64')}` + '"'; imageSrcs.push(imageSrc); } %> initializeSlider($(".slider-<%= i+1 %>"), <%= imageSrcs %>); <% } %>
解决方法
问题根源在于:你手动给数组元素添加双引号后,直接输出数组时,EJS会把双引号转义成",这就是报错里&字符的来源。
正确的做法是不要手动给元素加引号,直接将原始的data URI字符串存入数组,然后用JSON.stringify()把整个数组转换成符合JavaScript语法的字符串后再输出:
修改后的代码:
<% for (let i = 0; i < posts.length; i++) { let imageSrcs = []; for (let j = 0; j < posts[i].images.length; j++) { // 直接存储原始的data URI字符串,无需手动添加引号 let imageSrc = `data:image/${posts[i].images[j].image.contentType};base64, ${posts[i].images[j].image.data.toString('base64')}`; imageSrcs.push(imageSrc); } %> // 用JSON.stringify生成标准的JS数组格式字符串 initializeSlider($(".slider-<%= i+1 %>"), <%= JSON.stringify(imageSrcs) %>); <% } %>
为什么这样能解决问题:
JSON.stringify()会自动为字符串元素添加双引号,同时处理所有需要转义的特殊字符,生成完全符合JavaScript语法的数组结构。- 这样就避免了手动拼接引号导致的HTML转义问题,EJS输出
JSON.stringify的结果时,会直接输出正确的字符串格式,不会把双引号转成"。
内容的提问来源于stack exchange,提问作者duruburak
相关产品推荐
相关产品推荐

