Javascript 为什么可以向对象添加嵌套字段而不能添加根字段?
这是基本的,但我不明白Javascript 为什么可以向对象添加嵌套字段而不能添加根字段?,javascript,Javascript,这是基本的,但我不明白 var test = {}; test["hello"] = {"love":"me"} //*** this is not allowed because there is no hello 因此,我必须首先创建一个属性: test.hello = test.hello || {}; 好的,这很清楚,但是现在如果我这样做-它是允许的: test.hello.world = "Hello world!"; 但是里面没有world属性,在前面的案例中不允许做什么,为
var test = {};
test["hello"] = {"love":"me"} //*** this is not allowed because there is no hello
因此,我必须首先创建一个属性:
test.hello = test.hello || {};
好的,这很清楚,但是现在如果我这样做-它是允许的:
test.hello.world = "Hello world!";
但是里面没有world
属性,在前面的案例中不允许做什么,为什么在这里可以做
只有根属性必须存在?您确定不允许吗?如果我这样做:
var test = {};
test.hello = "xx"
它确实会创建一个名为hello
的属性,其值为“xx”
我希望这能澄清一点 您确定这是不允许的吗?如果我这样做:
var test = {};
test.hello = "xx"
它确实会创建一个名为hello
的属性,其值为“xx”
我希望这能澄清一点 我想您的第一个案例不起作用,因为您正在使用
“使用strcit”
//分配给不可扩展对象上的新属性
var固定={};
fixed.newProp='ohai';//抛出一个TypeError
我猜您的第一个案例不起作用,因为您正在使用
“使用strcit”
//分配给不可扩展对象上的新属性
var固定={};
fixed.newProp='ohai';//抛出类型错误
您只能访问未定义
或空
上的属性。例如,此代码是有效的
constobj={};
obj.prop=“值”;
但是这个没有
const num=未定义;//也可以为空
num.prop=“值”;
有道理,对吧
试图访问对象中不存在的属性将返回未定义的
constobj={};
console.log(obj.abc);//日志“未定义”
因此,当您执行obj.abc.def=“value”代码>,其计算结果为(obj.abc).def=“value”代码>,其计算结果为undefined.def=“value”代码>,这是无效的,因为无法访问未定义的
上的属性
当您尝试获取属性时也会发生同样的情况。您只能在未定义
或空
上访问属性。例如,此代码是有效的
constobj={};
obj.prop=“值”;
但是这个没有
const num=未定义;//也可以为空
num.prop=“值”;
有道理,对吧
试图访问对象中不存在的属性将返回未定义的
constobj={};
console.log(obj.abc);//日志“未定义”
因此,当您执行obj.abc.def=“value”代码>,其计算结果为(obj.abc).def=“value”代码>,其计算结果为undefined.def=“value”代码>,这是无效的,因为无法访问未定义的
上的属性
当您尝试获取属性时,也会发生同样的情况。在第一种情况下,它是允许的,但不允许。伙计,你做错了你的例子test.hello=“xx”
很好,而且很有效。test.hello=“xx”
基本上与在对象test
上的hello
键插入值“xx”
基本相同,即使你编辑了问题,它仍然是允许的。在第一种情况下它是允许的……它不是。伙计,你做错了你的例子test.hello=“xx”
非常好,而且它工作正常。test.hello=“xx”
基本上与在对象test
上的hello
键插入值“xx”
基本相同。我明白了。因此,我必须使上一级不为空。好的,当他们允许我的时候,我会接受这个答案。谢谢你,很高兴能帮上忙!我懂了。因此,我必须使上一级不为空。好的,当他们允许我的时候,我会接受这个答案。谢谢你,很高兴能帮上忙!“抛出一个TypeError
”嗯。。。不,它不会。”抛出一个类型错误“嗯。。。不,没有。