正在将element.dataset(DOMStringMap对象)转换为;“真正的”;普通JavaScript中的JSON对象?

正在将element.dataset(DOMStringMap对象)转换为;“真正的”;普通JavaScript中的JSON对象?,javascript,jquery,ecmascript-6,html5-data,Javascript,Jquery,Ecmascript 6,Html5 Data,如a中所述,在香草JavaScript中,我可以执行以下操作: var data = Object.assign({}, element.dataset); 。。。为了获取所有数据-*属性作为对象 但是,生成的对象不是一个“真实”的JSON对象,布尔值和数字都用引号括起来 <div id="my-element" data-string="It's OK." data-bool="true" data-number="10"> </div>

如a中所述,在香草JavaScript中,我可以执行以下操作:

var data = Object.assign({}, element.dataset);
。。。为了获取所有
数据-*
属性作为对象

但是,生成的对象不是一个“真实”的JSON对象,布尔值和数字都用引号括起来

<div id="my-element"
    data-string="It's OK."
    data-bool="true"
    data-number="10">
</div>

下面是vanilla JavaScript和jQuery之间的比较:

我假设在jQuery中,
jQuery('#my element').data()
在返回实际的JSON之前,正在执行“提升”数据的繁重工作


由于我想使用ES6而不是jQuery,并且我不想重新发明轮子(使用regex/conditions解析该值),我想问是否有一种快速的方法来完成这项工作

jQuery中的数据处理是在中的
getData()
函数中完成的

以下是JQuery库中的代码:


您可以使用此功能更新数据。

所以,这是一个小问题,但却是一个您似乎感到困惑的重要问题。没有JSON对象这样的东西。JSON是一个字符串。JSON值可能包含对象的语法,但它不是对象。它是一根绳子。而且,您正在进行的控制台日志记录不是JSON。它们只是对象。抱歉这么不准确,是的,我还在学习JavaScript。谢谢你的澄清。我无法想象这是如此简单。谢谢,这个怎么叫?循环调用、递归调用或JSON恢复器?将对象值循环并将值提供给此函数,然后替换为返回值。
function getData( data ) {
    if ( data === "true" ) {
        return true;
    }

    if ( data === "false" ) {
        return false;
    }

    if ( data === "null" ) {
        return null;
    }

    // Only convert to a number if it doesn't change the string
    if ( data === +data + "" ) {
        return +data;
    }
    //Replaced rbrace with regex value.
    if ( /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/.test( data ) ) {
        return JSON.parse( data );
    }

    return data;
}