在JavaScript中,为什么执行 `var data = [[${returnObj}]]`时会报错,提示returnObj返回的数据中的双引号被转成了""?
时间: 2024-12-18 11:20:38 浏览: 3
在JavaScript中,当你试图将 `${returnObj}` 插入到字符串字面量 `[[]]` 中时,如果`returnObj`是一个包含双引号(`"`)的JSON对象,这些双引号会被浏览器自动转义成 `"`,因为JavaScript引擎需要确保字符串内容不会破坏字符串字面量的语法。
例如,如果你的 `returnObj` 可能像这样:
```javascript
let returnObj = {
key: "value with \"double quotes\""
};
```
当你执行 `var data = [[${returnObj}]]` 时,实际插入的是 `[[{key: "value with "double quotes""}]]`,这在语法上是错误的,因为它期待的是两个数组元素,而每个元素内部包含一个键值对,不是嵌套的字符串。
为了解决这个问题,你需要在插入前先处理 `returnObj` 的字符串值,可以使用模板字符串(template literals)或者JSON.stringify()函数:
```javascript
var data = [[`${JSON.stringify(returnObj)}`]];
// 或者
var data = [[`[ ${returnObj.key} ]`]];
```
相关问题
function create(obj) { obj = $(obj); if (!obj.hasClass("selected")) { return true; } var orderItemMap = {}; var tr = $("input.cbx_select:checked").parents("tr.orderItem_info"); tr.each(function () { var key = $(this).find(".input_orderItem").attr("name"); orderItemMap[key] = $(this).find(".item_amount").children("input").val(); }); $.ajax({ url: "/tmall/orderItem", type: "PUT", data: { "orderItemMap": JSON.stringify(orderItemMap) }, traditional: true, success: function (data) { if (data.success) { location.href = "/tmall/order/create/byCart?order_item_list=" + data.orderItemIDArray; return true; } else { alert("购物车商品结算异常,请稍候再试!"); location.href = "/tmall/cart"; } }, beforeSend: function () { }, error: function () { alert("购物车商品结算异常,请稍候再试!"); location.href = "/tmall/cart"; } }); }
这是一个 JavaScript 函数,其中包含了一个 Ajax 请求。该函数的作用是在用户点击某个元素时,将购物车中选中的商品结算,并跳转到订单创建页面。
具体实现过程如下:
1. 首先,该函数接收一个参数 obj,并将其转换为 jQuery 对象。
2. 然后,判断该元素是否具有 "selected" 类。如果没有,直接返回 true,不执行后续逻辑。
3. 如果具有 "selected" 类,则创建一个空对象 orderItemMap,用于存储订单项信息。
4. 遍历所有被选中的商品行(即选中了复选框的行),将每个商品的名称和数量存储到 orderItemMap 对象中。
5. 向服务器发送一个 PUT 请求,将 orderItemMap 对象作为参数传递到服务器端。
6. 如果请求成功,服务器会返回一个包含订单项 ID 的数组,该函数会将其作为参数,跳转到订单创建页面。如果请求失败,则弹出提示消息并跳转到购物车页面。
7. 在 Ajax 请求发送前和结束后,分别执行 beforeSend 和 success 回调函数。如果请求出错,则执行 error 回调函数。
总之,该函数的目的是在用户点击结算按钮时,将购物车中选中的商品转换为订单项,并跳转到订单创建页面。
onclick="create(this)"; function create(obj) { obj = $(obj); if (!obj.hasClass("selected")) { return true; } var orderItemMap = {}; var tr = $("input.cbx_select:checked").parents("tr.orderItem_info"); tr.each(function () { var key = $(this).find(".input_orderItem").attr("name"); orderItemMap[key] = $(this).find(".item_amount").children("input").val(); }); $.ajax({ url: "/tmall/orderItem", type: "PUT", data: { "orderItemMap": JSON.stringify(orderItemMap) }, traditional: true, success: function (data) { if (data.success) { location.href = "/tmall/order/create/byCart?order_item_list=" + data.orderItemIDArray; return true; } else { alert("购物车商品结算异常,请稍候再试!"); location.href = "/tmall/cart"; } }, beforeSend: function () { }, error: function () { alert("购物车商品结算异常,请稍候再试!"); location.href = "/tmall/cart"; } }); }
这段代码是一个 JavaScript 函数,其中 onclick 为 HTML 中的一个事件属性,表示当用户点击某个元素时会触发该函数。具体函数实现如下:
1. 首先,函数接收一个参数 obj,并将其转换为 jQuery 对象。
2. 然后,判断该元素是否具有 "selected" 类。如果没有,直接返回 true,不执行后续逻辑。
3. 如果具有 "selected" 类,则创建一个空对象 orderItemMap,用于存储订单项信息。
4. 遍历所有被选中的商品行(即选中了复选框的行),将每个商品的名称和数量存储到 orderItemMap 对象中。
5. 使用 Ajax 发送 PUT 请求到服务器的 "/tmall/orderItem" 地址,并将 orderItemMap 对象作为请求参数传递给服务器。
6. 如果请求成功,服务器会返回一个包含订单项 ID 的数组,该函数会将其作为参数,跳转到订单创建页面。如果请求失败,则弹出提示消息并跳转到购物车页面。
7. 在 Ajax 请求发送前和结束后,分别执行 beforeSend 和 success 回调函数。如果请求出错,则执行 error 回调函数。
总之,这段代码的作用是在用户点击结算按钮时,将购物车中选中的商品转换为订单项,并跳转到订单创建页面。
阅读全文