Javascript 将对象属性设置为“未定义”
在Chrome和Node的控制台上,我将对象的属性赋值为Javascript 将对象属性设置为“未定义”,javascript,Javascript,在Chrome和Node的控制台上,我将对象的属性赋值为undefined const foo = { bar: undefined }; 当我再次计算foo时,我希望它会给我一个空对象({}),但它会返回: { bar: undefined } {bar:undefined}和{}之间有什么区别吗 我之所以问这个问题,是因为这个差异使我的测试失败了——我希望结果是{},但它失败了,因为实际的响应是{bar:undefined} 如果是{bar:null}我会理解,因为null是一个
undefined
const foo = {
bar: undefined
};
当我再次计算foo
时,我希望它会给我一个空对象({}
),但它会返回:
{
bar: undefined
}
{bar:undefined}
和{}
之间有什么区别吗
我之所以问这个问题,是因为这个差异使我的测试失败了——我希望结果是{}
,但它失败了,因为实际的响应是{bar:undefined}
如果是
{bar:null}
我会理解,因为null
是一个实际值。但我的理解是,未定义
意味着属性未定义,因此甚至不是一个值。实际上是的。对于第一个定义了名为bar
,但其值为未定义的属性,属性存在。对于第二个,您没有名为bar
的属性
你可以看看这个例子。在对象上调用hasOwnProperty
,将返回bar
属性的结果。foo1
的属性bar
存在,它不依赖于属性值
const foo1={
酒吧:未定义
};
常量foo2={};
console.log(foo1.hasOwnProperty('bar'));
console.log(foo2.hasOwnProperty('bar'))
使用delete
操作符完全删除属性(这样hasOwnProperty()
,for in
,get*propertydescriptor()
等就看不到它了)。当然这两者之间有区别{}
是一个空的对象,而{bar:undefined}
是一个属性bar
未定义的对象
注:我看到你对另一个答案的评论。是,bar
属性未定义,但它仍然存在。变量或属性未定义或不存在之间存在差异。举个例子:
varx;
控制台日志(x)代码>是的,有区别{bar:undefined}
有一个名为bar
的属性,其值为undefined
,而{}
没有名为bar的属性
{bar:undefined}==true中的“bar”
null
和undefined
是两个不同的东西,但它们都是值。我认为您的困惑源于这样一个事实,即访问一个不存在的属性也会导致未定义。例如,({}).bar==未定义的
const foo = {
bar: undefined
};
但是,如果对象的属性确实存在,但值未定义
,并且这些对象之间存在差异,则该属性也是有效的。如其他人所述,您可以使用delete
操作符从对象中删除属性。未定义是一种数据类型,如果您花费未定义或为空,则属性栏将始终等于花费的值,而不是空值
如果您需要的是空对象,则可以执行以下操作:
const foo = {
bar: new Object(null); // or empty, or false
};
or
const foo = {
bar: {}
};
通过以下方式在控制台中进行检查:
({} === undefined); // this return false
(new Object() === undefined); // this return false
未定义是一个值。您可以使用delete
运算符。{bar:undefined}和{}之间有什么区别吗?“是的,一个是空对象,另一个是具有1个属性且值为undefined的对象。如果它是{bar:null}
,我会理解,但我认为undefined
表示属性未定义,因此甚至不是值。@dayuolinull
和undefined
是两个不同的东西,但它们都是值。我认为您的困惑源于这样一个事实,即访问一个不存在的属性的结果也是未定义的
,例如({}).bar==未定义的
。但是,如果对象的属性确实存在,但其值未定义,并且这些对象之间存在差异,则该属性也是有效的。如其他人所述,您可以使用运算符从对象中删除属性。@dayulli如果要从对象中删除属性,而不是将其值设置为未定义的
,则可以使用delete运算符。“我认为您的困惑源于这样一个事实,即访问一个不存在的属性也会导致未定义
”