Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以使用HTML元素作为对象键吗?_Javascript_Html_Dictionary_Object_Dom - Fatal编程技术网

Javascript 我可以使用HTML元素作为对象键吗?

Javascript 我可以使用HTML元素作为对象键吗?,javascript,html,dictionary,object,dom,Javascript,Html,Dictionary,Object,Dom,我正在尝试创建一个以HTML元素为键的对象。我使用document.createElement('div')创建键,但当我尝试将这两个键都插入到对象中时,第二个键最终会替换第一个键: a=document.createElement('div'); 设b=document.createElement('div'); 设obj={}; obj[a]=3; obj[b]='x'; 控制台日志(obj)对象只能保存字符串键。您的divs正在序列化为字符串,然后相互重写。如果希望将HTML元素作为键保

我正在尝试创建一个以HTML元素为键的对象。我使用
document.createElement('div')
创建键,但当我尝试将这两个键都插入到对象中时,第二个键最终会替换第一个键:

a=document.createElement('div');
设b=document.createElement('div');
设obj={};
obj[a]=3;
obj[b]='x';

控制台日志(obj)对象只能保存字符串键。您的
div
s正在序列化为字符串,然后相互重写。如果希望将HTML元素作为键保存,则应使用类似的:

a=document.createElement('div');
设b=document.createElement('div');
设map=newmap();
地图集(a,3);
映射集(b,'x');
//使用Array.from打印结果

log(Array.from(map))a
对象中创建密钥时,编码

let a = document.createElement('div');
obj[a] = 3;
它为
对象
分配
a
的字符串表示形式,即
“[object htmldevelment]”

因此,当您分配
b

obj[b] = 'x';
你真正想说的是

obj["[object HTMLDivElement]"] = 'x'
“[object htmldevelment]”
已存在于对象中,因此它将新值
'x'

console.log(obj); // { "[object HTMLDivElement]": "x" }

你想做什么,你的用例是什么?你可以使用
Map
而不是普通的对象。这个问题是在采访中问我的。但是,找不到答案。面试的问题到底是什么?你肯定误解了他们的要求。每当一个键被添加到一个对象中时,它在内部执行
String(key)
String(a)
String(b)
都返回
“[object htmldevelment]”
。问题是什么还不清楚。你的面试问过我们如何使用HTML元素作为对象的键吗?我知道这一点,但是,我希望有其他的方法,这样我才能获得结果。你显然不知道这一点。如果你知道这一点,你就不会把它作为解决方案。如果需要其他选项,只需
Array.from(map)
就足以返回条目:)
console.log(obj); // { "[object HTMLDivElement]": "x" }