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
”嗯。。。不,它不会。”抛出一个
类型错误
“嗯。。。不,没有。