const person = {
firstName: "Lydia",
lastName: "Hallie",
pet: {
name: "Mara",
breed: "Dutch Tulip Hound",
},
getFullName() {
return `${this.firstName} ${this.lastName}`;
},
};
console.log(person.pet?.name);
console.log(person.pet?.family?.name);
console.log(person.getFullName?.());
console.log(person.getLastName?.());
通过逐行分析代码来看输出结果:
-
console.log(person.pet?.name);
- 这一行代码打印了
person.pet.name
的值,如果该值存在且不为null
或undefined
,则输出该值。 - 在这种情况下,
person.pet.name
的值为"Mara"
,因此输出将是"Mara"
。
- 这一行代码打印了
-
console.log(person.pet?.family?.name);
- 这一行代码试图访问
person.pet.family.name
的值,但是由于使用了?.
,即使person.pet.family
不存在(为null
或undefined
),也不会抛出错误,而是返回undefined
。 - 因此,输出将是
undefined
。
- 这一行代码试图访问
-
console.log(person.getFullName?.());
- 这一行代码调用
person.getFullName()
方法(如果存在)并输出其返回值。 - 在这种情况下,
getFullName
方法存在,它会返回"Lydia Hallie"
,因此输出将是"Lydia Hallie"
。
- 这一行代码调用
-
console.log(person.getLastName?.());
- 这一行代码试图调用一个名为
getLastName
的方法(如果存在),但是person
对象中并不存在getLastName
方法,所以它将返回undefined
。 - 因此,输出将是
undefined
。
- 这一行代码试图调用一个名为