具有属性的JavaScript数组

具有属性的JavaScript数组,javascript,arrays,Javascript,Arrays,我是这样使用数组的 var names=['a','b','c']; var names=[]; for(var i=0;i<inputNumberByUser;i++) //guys my array is populating dynamically,depends upon user input { names.push({FirstName:'abc',LastName:'zyx'}); } 当我试图访问名称[5]时。它简单地返回undefined,不给出错误 之后我像这样改

我是这样使用数组的

var names=['a','b','c'];
var names=[];

for(var i=0;i<inputNumberByUser;i++) //guys my array is populating dynamically,depends upon user input
{
names.push({FirstName:'abc',LastName:'zyx'});
}
当我试图访问
名称[5]
时。它简单地返回undefined,不给出错误

之后我像这样改变了我的数组

var names=['a','b','c'];
var names=[];

for(var i=0;i<inputNumberByUser;i++) //guys my array is populating dynamically,depends upon user input
{
names.push({FirstName:'abc',LastName:'zyx'});
}
为什么上面的线给出了错误?它应该只返回未定义的普通数组


名称[5]
名称[5]。未定义名字
names[5]
返回
'undefined'
names[5]。FirstName
错误。这就是我的观点
names[5]。FirstName
也应该像
names[5]
那样简单地返回
'undefined'
,因为您的
for
迭代没有达到第六个(计数为零)索引,而只有第三个索引

您在
for(var i=0;i<3;i++)中所做的工作本质上是:

names.push({FirstName:'abc',LastName:'zyx'});
push({FirstName:'abc',LastName:'zyx'});
push({FirstName:'abc',LastName:'zyx'});
迭代的结果如下:

console.log(名称[0].FirstName);//“abc”
console.log(名称[1].FirstName);//“abc”
console.log(名称[2].FirstName);//“abc”
console.log(名称[3].FirstName);//未定义
console.log(名称[4].FirstName);//未定义
console.log(名称[5].FirstName);//未定义
通过执行
console.log(names[5])
可以输出
names
变量的第五个索引的内容未定义
不一定是错误消息

名称[5]
^^^未定义
相反,通过执行
console.log(names[5].FirstName)
操作,您试图访问一个不存在的对象的属性,因为
names[5]
未定义的

名称[5]。名字
^^^未定义

您的数组有三个元素。您试图访问上述代码中不存在的第六个元素。

为什么会出现错误? 此处
names[5]
返回
undefined
,您试图访问未定义元素的
FirstName
属性。这就像试图找到一个不存在的人的地址


你的问题的第一部分,你已经创建了一个包含3个元素的数组,即
var names=['a','b','c'];
并且你试图从你定义的数组
names[5]
中访问第6个元素,而这个数组实际上并不存在。因此它返回
undefined

关于问题的第二部分,您有以下代码:

var names=[];

for(var i=0;i<3;i++)
{
  names.push({FirstName:'abc',LastName:'zyx'});
}
var name=[];

对于(var i=0;ii在第二种情况下,您试图从未定义的对象获取FirstName的值。数组包含3个元素,您希望访问不存在的第5个(第6个)元素?@Khallister names[5]和names[5]。FirstName都未定义。names[5]返回“undefined”,但返回名称[5].FirstName错误。这是我的观点。我知道,但我正在询问为什么它在行名[5]上没有给出错误?它也不存在。我希望在名称[5]中有相同的行为。如果没有定义FirstName,则它是因为执行
console.log(名称[5])
您正在输出
names
变量的第五个索引内容。
javascript中未定义的
不一定是错误消息。通过执行
console.log(names[5].FirstName)
相反,您试图访问不存在的对象的属性,因为
names[5]
未定义的
。是的,你明白我的意思了,那么它的解决方案是什么。我想要
名称[5]。FirstName
不给出错误,它应该只返回未定义,然后通过执行
名称[5]={}在
名称[5]
中初始化一个空对象
。你不能用其他方法来做。我已经更新了我的问题,请参阅for loop,now names数组长度取决于用户输入。因此我无法预定义长度。我的数组正在实际代码中动态填充。如果用户试图访问未定义的属性,我需要一个解决方法,然后只需通知,不要像names一样给出错误[5]。然后,您必须检查对象中是否存在该属性。请使用此信息更新您的问题。同时,这将为您提供更多概念。我已更新了我的答案以回应您的评论。请检查答案并让我们知道它是否适用于您。如果您仍然感到困惑,请更新您的问题acco我已经尝试了这个
names[5]。hasOwnProperty('lastName')
。它给了我一个错误,无法准备属性
hasOwnProperty
。它将该函数作为属性。如何测试不存在的对象。