我是javascript的全新手。 在下面的模板和JS函数中,我试图显示person1名称和person2名称并显示它们是否相等。
<!DOCTYPE html>
<html>
<head>
<script>
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert("in function" + this.name);
};
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
alert(person1.sayName());
alert(person2.sayName());
alert(person1.sayName() == person2.sayName() );
</script>
</head>
<body>
<div>
</div>
</body>
</html>
但我一个接一个地收到这些警告。
in functionNicholas
undefined
in functionGreg
undefined
in functionNicholas
in functionGreg
true
请帮我控制流程。 如果问题太愚蠢和基本,请原谅我。 感谢
我不知道为什么我会两次收到未定义的警报。
答案 0 :(得分:4)
它提醒undefined
因为,alert
不会返回任何内容,或者您的功能person1.sayName()
不会返回任何内容,只会发出警报。
根据您的命名约定sayName
是正确的,因为它通过警报,打印,显示或类似方式完成其工作,但不必返回任何内容,并且它不会返回任何内容。因此person1.sayName() == person2.sayName()
是真的undefined == undefined
。
答案 1 :(得分:2)
当你这样做时:
alert(person1.sayName());
发生以下情况:
person1.sayName()
。alert('in function' + this.name);
,这会导致in functionNicholas
收到警报。sayName
函数返回。由于没有return somevalue
语句,因此返回undefined
。alert
,这就像alert(undefined)
,这就是您看到undefined
已发出警报的原因。你做什么:
alert(person1.sayName() == person2.sayName());
它会调用每个人的sayName
方法,该方法会提醒他们的姓名。他们每个都返回undefined
,所以你这样做:
alert (undefined == undefined);
由于它们相同,因此会发出警告true
。
答案 2 :(得分:1)
您应该使用:
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert("in function" + this.name);
};
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
person1.sayName();
person2.sayName();
答案 3 :(得分:0)
sayName()函数不返回任何值,默认返回值是未定义的,所以你实际在做的是将一个undefined与另一个undefined进行比较
var x = person1.sayName()
// x is undefined
你可以改变 sayName()以在警报后返回当前名称:
this.sayName = function(){
alert("in function" + this.name);
return this.name;
};
答案 4 :(得分:0)
每次运行sayName()函数时,都会在函数中创建一个警报,然后返回undefined。总是在JavaScript中返回一些内容,如果没有指定任何内容,那么它是未定义的。
你首先为尼古拉斯打印sayName,提醒他的名字,然后返回undefined。然后,您会提醒返回的值(未定义)。
重复Greg。
最后一行比较两者,它们首先警告它们的两个名称,然后比较两个返回的函数(换句话说,undefined == undefined,这是TRUE)。然后提醒True。
答案 5 :(得分:0)
其他答案都是正确的。此外,为了进行比较,在您的上次提醒中,我想您想检查这些人的姓名是否相同。
alert(person1.name === person2.name);
为此,您可以使用上面的“点语法”访问每个对象的name
属性。 ===
(三重等于)运算符是此语言中比较的最佳运算符。您应该更喜欢标准[不可靠] ==
。