dataset.value returning“;[对象对象]”;而不是JavaScript中的实际对象

dataset.value returning“;[对象对象]”;而不是JavaScript中的实际对象,javascript,object,Javascript,Object,我试图为从控制器传递到DOM的select from对象动态创建选项。作为选项的一部分,我需要将这些对象的属性作为数据值传递。我可以构建select fine,但无法正确构建dataset.value。目前,我的代码是: select.name = "indicator_id_option_" + count; select.id = "indicator_" + count; select.setAttribute("onchange", "if (typeof(this.selectedIn

我试图为从控制器传递到DOM的select from对象动态创建选项。作为选项的一部分,我需要将这些对象的属性作为数据值传递。我可以构建select fine,但无法正确构建dataset.value。目前,我的代码是:

select.name = "indicator_id_option_" + count;
select.id = "indicator_" + count;
select.setAttribute("onchange", "if (typeof(this.selectedIndex) != '--'){ addNewSelect(this)}");
indicators.forEach(function(indicator){
    var optionToAppend = document.createElement('option');
    optionToAppend.text = indicator.pk;
    var dataVal = {"id": indicator.pk, "timePeriod": indicator.fields.time_period};
    optionToAppend.dataset.value = Object.assign({}, dataVal);
    console.log(optionToAppend.dataset.value);
    select.appendChild(optionToAppend);
});

Indicators
是一个对象对象,我可以通过fine进行迭代,并且可以毫无问题地调用的属性。构建选项时,选项文本正确显示(指示器.pk),但数据值显示为
[object]
。当
console.log
记录
dataset.value
时,我得到
[object object]
,当记录
JSON.stringify(dataset.value)
时,我得到
“[object object]”
。当我注销
dataVal
时,我得到了可以访问-
对象{id:92235,timePeriod:“annual”}
属性的实际对象。我已经尝试了直接赋值-
optionToAppend.dataset.value=dataVal
,上面的选项没有正确创建对象。有什么指导吗?

当您设置
optionAppend.dataset.value
将对象隐式转换为字符串时,会出现问题

您可以通过使用将对象转换为JSON字符串来解决此问题:

optionToAppend.dataset.value = JSON.stringify(dataVal);

>有什么指导吗?在DOM属性中有许多getter/setter函数,它们强制转换类型和/或值。在当前情况下,通过设计
数据集
对象,
被强制为字符串。DOM模型允许您将自定义标记添加到对象中,并且由于它没有被冻结,您可以轻松地将目标属性附加到自然对象中。
optionToAppend.dataset.value=JSON.stringify(dataVal)?@johankarsson-这似乎奏效了!非常感谢。我将JSON分配给一个数据集值,这也修复了它,当您想要取回它时,只需执行
JSON.parse(optionToAppend.dataset.value)