Javascript 为什么此函数会打印“;未定义未定义;作为联系人姓名,添加了“;新对象”;?

Javascript 为什么此函数会打印“;未定义未定义;作为联系人姓名,添加了“;新对象”;?,javascript,javascript-objects,Javascript,Javascript Objects,我在上JavaScript课程。在本练习中,我们将创建函数add,该函数将一个人添加到contacts数组中,然后使用提示从用户获取信息,然后调用函数list将contacts数组中的所有人打印到控制台 当我运行下面的代码时,它会列出联系人数组中的两个现有人员,但随后会为我尝试添加的人员打印“undefined undefined”。但是,当我打印联系人的长度时,它会显示3,因此添加了一个人 任何帮助都将不胜感激 var-bob={ 名字:“鲍勃”, 姓:“琼斯”, 电话号码:“(650)77

我在上JavaScript课程。在本练习中,我们将创建函数
add
,该函数将一个人添加到
contacts
数组中,然后使用提示从用户获取信息,然后调用函数
list
contacts
数组中的所有人打印到控制台

当我运行下面的代码时,它会列出
联系人
数组中的两个现有人员,但随后会为我尝试添加的人员打印
“undefined undefined”
。但是,当我打印
联系人的长度时,它会显示
3
,因此添加了一个人

任何帮助都将不胜感激

var-bob={
名字:“鲍勃”,
姓:“琼斯”,
电话号码:“(650)777-7777”,
电子邮件:“鲍勃。jones@example.com"
};
变量玛丽={
名字:“玛丽”,
姓:“约翰逊”,
电话号码:“(650)888-8888”,
电子邮件:“玛丽。johnson@example.com"
};
var触点=新阵列(bob、mary);
功能打印人员(个人){
console.log(person.firstName+“”+person.lastName);
}
函数列表(){
变量长度=触点长度;
var i;
对于(i=0;ilist()要创建具有属性的新对象,必须为每个属性同时提供属性名称和属性值。您只是将一个值列表传递给
新对象()
构造函数,该构造函数不生成您想要的对象类型

有几种方法可以创建具有属性的新对象,但在本例中,可能最简单的方法是使用文本对象声明格式
{name1:val1,name2:val2}
。为此,请更改此代码:

var add = function(firstName, lastName, email, telephone){
    contacts[contacts.length] = new Object(firstName, lastName, email, telephone);
}; 
为此:

var add = function(firstName, lastName, email, telephone){
    contacts[contacts.length] = {firstName: firstName, lastName: lastName, email: email, phoneNumber: telephone};
}; 

它在这里工作:

要创建具有属性的新对象,必须为每个属性同时提供属性名称和属性值。您只是将一个值列表传递给
新对象()
构造函数,该构造函数不生成您想要的对象类型

有几种方法可以创建具有属性的新对象,但在本例中,可能最简单的方法是使用文本对象声明格式
{name1:val1,name2:val2}
。为此,请更改此代码:

var add = function(firstName, lastName, email, telephone){
    contacts[contacts.length] = new Object(firstName, lastName, email, telephone);
}; 
为此:

var add = function(firstName, lastName, email, telephone){
    contacts[contacts.length] = {firstName: firstName, lastName: lastName, email: email, phoneNumber: telephone};
}; 

它在这里起作用:

计算
person
的结果对象不是您期望的对象,它没有名为
firstName
lastName
的属性:
新对象(firstName、lastName、email、phone)
不要忘记声明变量(搜索中的i)。也不喜欢函数表达式,因为函数声明可以完成任务(搜索和添加函数)。最后,使用数组文本代替数组构造函数,例如,代替
var contacts=new array(bob,mary)使用
var联系人=[bob,mary]
。计算
person
的结果对象不是您期望的对象,它没有名为
firstName
lastName
的属性:
新对象(firstName、lastName、email、phone)
不要忘记声明变量(搜索中的i)。也不喜欢函数表达式,因为函数声明可以完成任务(搜索和添加函数)。最后,使用数组文本代替数组构造函数,例如,代替
var contacts=new array(bob,mary)使用
var联系人=[bob,mary]。它应该是
电话号码
,而不是
电话
(但您的代码可以工作,因为
printPerson
不使用它)。在这里查看:谢谢,它可以工作,但是教程说这可以通过构造函数新对象(名字)…@Michael:
Object()
构造函数接受零个或一个参数,所以
新对象(名字、名字、电子邮件、电话)
就像说
新对象(名字)
与您之前的评论一样,它不会创建您似乎期望的内容。除非你断章取义,否则本教程肯定有错误。它应该是
phoneNumber
,而不是
phone
(但你的代码有效,因为
printPerson
不使用它)。在这里查看:谢谢,它可以工作,但是教程说这可以通过构造函数新对象(名字)…@Michael:
Object()
构造函数接受零个或一个参数,所以
新对象(名字、名字、电子邮件、电话)
就像说
新对象(名字)
与您之前的评论一样,它不会创建您似乎期望的内容。除非你断章取义,否则本教程肯定是错的。