Javascript 为什么JS要求对象/数组存在
我已经在angular上工作了大约六个月,因此在javascript中更多地使用JSON和对象。我遇到的这种情况令人沮丧,我不明白其中的道理。可能是因为我对JS缺乏经验,所以我不知道原因,也可能是我做错了,但我希望能对此有所了解 对象示例:Javascript 为什么JS要求对象/数组存在,javascript,Javascript,我已经在angular上工作了大约六个月,因此在javascript中更多地使用JSON和对象。我遇到的这种情况令人沮丧,我不明白其中的道理。可能是因为我对JS缺乏经验,所以我不知道原因,也可能是我做错了,但我希望能对此有所了解 对象示例: var data = { "object": { "Key":"Value", "stuff":"here" }, "array": [
var data =
{
"object":
{
"Key":"Value",
"stuff":"here"
},
"array":
[
{
"Name":"Pizza Face",
"id":7
},
{
"Name":"Maple bar",
"id":1
}
]
}
假设我想向数组中添加一个对象。简单,对吗
var newObject = {"Name": "Master Sword", "id":2}
data.array.push(newObject);
但是,假设我想在数组存在之前将对象添加到数组中。上面的方法错误地指出,
无法读取未定义的
的属性“push”。取而代之的是,我必须在它周围附加一个条件
var newObject = {"Name": "Master Sword", "id":2}
if(data.array){
data.array.push(newObject);
}
else{
data.array = [];
data.array.push(newObject);
}
我可以随时向数据添加新对象。然而,如果我试图在一个对象中添加一个对象,我就有祸了
例如:
data.newObject = {"Name": "Master Sword", "id":2}
在这种情况下,将创建新对象,每个人都很高兴
data.newObject.Name = "Master Sword"
失败<代码>无法设置未定义的属性“名称”
那么…为什么JS不使用布局好的键值对创建新对象呢?或者,当我尝试推送到一个不存在的数组时,为什么不创建该数组而不是出错
我想说清楚,虽然这让我很沮丧,但我问这个问题的目的不是抱怨。这是问我是否做错了。在尝试添加到对象/数组之前,是否确实需要一个条件来检查该对象/数组是否存在?有更好的方法吗?方法
push
位于javascript数组
对象上,因此该方法不适用于null
或未定义
。这几乎适用于所有编程语言
调用
data.newObject={“Name”:“Master Swarm”,“id”:2}
您实际上是在将属性设置为一个新对象,这与上面的情况截然不同。方法推送
位于一个javascript数组
对象上,毫不奇怪,该方法在null
或undefined
上都不起作用。这几乎适用于所有编程语言
调用
data.newObject={“Name”:“Master Swarm”,“id”:2}
您实际上是在将属性设置为一个新对象,这与上面的情况截然不同。方法推送
位于一个javascript数组
对象上,毫不奇怪,该方法在null
或undefined
上都不起作用。这几乎适用于所有编程语言
调用
data.newObject={“Name”:“Master Swarm”,“id”:2}
您实际上是在将属性设置为一个新对象,这与上面的情况截然不同。方法推送
位于一个javascript数组
对象上,毫不奇怪,该方法在null
或undefined
上都不起作用。这几乎适用于所有编程语言
当调用
data.newObject={“Name”:“Master Swarm”,“id”:2}
时,您实际上是在将属性设置为一个新对象,这与上述情况完全不同。这是因为当您尝试引用一个对象的键时,如果该键不存在,那么该键将被创建,并且未定义的值将被分配给它。undefined只是一个JS值类型。如果要检查“undefined”是否为错误,只需注意控制台上的“undefined”是用灰色编写的。(错误为红色)
如果您将一个对象分配给另一个对象的键,并且希望向其添加属性,那么这根本不代表问题
但是,如果您尝试向可以用未定义的值初始化的键添加属性,那么您将得到一条错误消息是合理的。记住,JS允许您在对象上存储任何想要的值类型
我建议您阅读更多关于对象的内容,以及JavaScript中未定义的值
希望有帮助。这是因为当您尝试引用对象的键时,如果该键不存在,那么该键将被创建,并且未定义的值将被分配给它。undefined只是一个JS值类型。如果要检查“undefined”是否为错误,只需注意控制台上的“undefined”是用灰色编写的。(错误为红色) 如果您将一个对象分配给另一个对象的键,并且希望向其添加属性,那么这根本不代表问题 但是,如果您尝试向可以用未定义的值初始化的键添加属性,那么您将得到一条错误消息是合理的。记住,JS允许您在对象上存储任何想要的值类型 我建议您阅读更多关于对象的内容,以及JavaScript中未定义的值
希望有帮助。这是因为当您尝试引用对象的键时,如果该键不存在,那么该键将被创建,并且未定义的值将被分配给它。undefined只是一个JS值类型。如果要检查“undefined”是否为错误,只需注意控制台上的“undefined”是用灰色编写的。(错误为红色) 如果您将一个对象分配给另一个对象的键,并且希望向其添加属性,那么这根本不代表问题 但是,如果您尝试向可以用未定义的值初始化的键添加属性,那么您将得到一条错误消息是合理的。记住,JS允许您在对象上存储任何想要的值类型 我建议您阅读更多关于对象的内容,以及JavaScript中未定义的值
希望有帮助。这是因为当您尝试引用对象的键时,如果该键不存在,则该键将被创建,未定义的值将被分配
a.b.c.d = new Object(); // a,b,c must be already defined, cannot have cascading here
var myComplexObject = function() { //add all reusable object constructors here };