为什么没有对象[undefined]在javascript中工作?

时间:2014-07-22 01:15:26

标签: javascript

我认为[]之间的所有值都转换为字符串,为什么没有undefined转换为"undefined"

var a={};
a[undefined];
Object.keys(a).length===0

2 个答案:

答案 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;