Javascript 为什么浏览器将我的单引号更改为双引号,并破坏了数据属性中的JSON?

Javascript 为什么浏览器将我的单引号更改为双引号,并破坏了数据属性中的JSON?,javascript,jquery,html,json,Javascript,Jquery,Html,Json,这应该比现在容易得多,但它让我陷入困境 我在输入数据属性中加入了一些JSON,第一个键上的引号关闭了该属性 以下是我想做的: var html = `<input type="checkbox" data-values='${dataVals}' />`; 但它在浏览器中显示如下: <input type="checkbox" data-values="{"checked":true,"unchecked":false}"> 这显然不是我想要的 我显然错过了什么。有什

这应该比现在容易得多,但它让我陷入困境

我在输入数据属性中加入了一些JSON,第一个键上的引号关闭了该属性

以下是我想做的:

var html = `<input type="checkbox" data-values='${dataVals}' />`;
但它在浏览器中显示如下:

<input type="checkbox" data-values="{"checked":true,"unchecked":false}">
这显然不是我想要的


我显然错过了什么。有什么想法吗?

结合@T.J.Crowder和@Teemu

我在json字符串的末尾添加了一个replace,将双引号替换为

然后,当我想稍后获取值时,也停止了尝试运行JSON.parse(),因为$.data('values')已经返回了一个javascript对象(如果可以的话)


“但它在浏览器中的显示方式是这样的”这只是DOM视图显示它的方式,而不是它的实际交付方式。如果您想知道它的实际交付方式,请使用“查看源代码”选项,它会显示您自己的原始HTML。“浏览器基本上是这样读取它的。”“不,它不是:@RocketHazmat当我执行类似于JSON.parse($('element').data('values'))的操作时,它会给我一个错误,可能是因为“{”不是有值的JSON。@Teemu:这是完全有效的(呃,没有隐藏字符)。记住,属性文本是HTML文本。
@T.J.Crowder是的,听起来很有趣=)。但是在你的“呃”之后注释,我确实将剪贴板内容粘贴到了JSFIDLE上,但没有看到任何隐藏字符。这必须是SO注释中的内容,因为现在当我从注释中复制代码时,JSFIDLE上确实出现了几个隐藏字符。@Teemu:Doh!我甚至知道会发生这种情况:
<input type="checkbox" data-values="{"checked":true,"unchecked":false}">
data-values="{"
JSON.stringify({ ... }).replace(/\"/g, "&quot;")
JSON.parse($(this).data('values')) => $(this).data('values')