我认为[]之间的所有值都转换为字符串,为什么没有undefined
转换为"undefined"
?
var a={};
a[undefined];
Object.keys(a).length===0
答案 0 :(得分:0)
我认为你基本上找到了一个边缘案例。
如果我有一个未定义的变量a
,则调用myObject[a]
也应该返回undefined
,就像你引用一个不存在的对象属性一样。硬编码未定义可能与使用未定义变量的解释器相同。
答案 1 :(得分:0)
您假设[]
之间的所有值都转换为字符串不正确。
话虽如此,如果您实际为undefined
键分配了任何内容,那么您会工作
var a = {};
a[undefined] = 1;
Object.keys(a).length === 1;
甚至
var a = {};
a[undefined] = undefined;
Object.keys(a).length === 1;
如果您没有为哈希中的键分配值,则不会保留该键。
修改强>
这种语言的运作方式很有趣。当您声明一个没有值的变量时,JS会使用值undefined
var x;
console.log(x); //undefined
但是当你试图在一个对象上声明一个键而没有将它赋值给一个值时,它就不会被初始化为undefined
;
var x = {};
x[1];
Object.keys(x).length === 0;
另外,为了好玩,从上面应该很容易看出以下情况:
var x; //initializes to undefined
var y = {};
y[undefined] = x;
Object.keys(y).length === 1;