簡體   English   中英

此JavaScript函數如何工作?

[英]How does this JavaScript function work?

我是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

請幫我控制流程。 如果這個問題太愚蠢和基本,請原諒我。 謝謝

我不知道為什么我兩次收到未定義的警報。

它發出undefined警報,因為alert不會返回任何東西,或者說您的函數(即person1.sayName()不會返回任何東西,它只是發出警報。

根據您的命名約定, sayName是正確的,因為它通過sayName警報,打印,顯示或類似內容來完成其工作,但不必返回任何內容,而只是不返回任何內容。 因此person1.sayName() == person2.sayName()為true,因為undefined == undefined

當您這樣做時:

alert(person1.sayName());

發生以下情況:

  1. 它調用person1.sayName()
  2. 這將調用alert('in function' + this.name); ,這會in functionNicholas上使尼古拉斯受到警告。
  3. sayName函數返回。 由於沒有return somevalue語句,因此它返回undefined
  4. 現在,您使用返回的值調用alert ,所以就像alert(undefined) ,這就是為什么看到undefined警報的原因。

如果您這樣做:

alert(person1.sayName() == person2.sayName());

它調用每個人的sayName方法,該方法會提醒他們的名字。 它們每個都返回undefined ,因此您可以執行以下操作:

alert (undefined == undefined);

由於它們相等,因此這將警告為true

您應該使用:

    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();

sayName()函數不返回任何值,默認返回值是未定義的,因此您實際上在做的是將一個未定義的值與另一個未定義的值進行比較

var x = person1.sayName()

// x is undefined

您可以更改sayName()以在警報后返回當前名稱:

this.sayName = function(){
    alert("in function" + this.name);
    return this.name;
};

每次運行sayName()函數時,都將在該函數中創建一個警報,然后返回未定義。 JavaScript總是返回一些東西,如果未指定任何內容,則它是未定義的。

您首先為Nicholas打印sayName,這會提醒他的名字,然后返回undefined。 然后,您警告返回的值(未定義)。

重復格雷格。

最后一行比較兩者,首先警告它們的兩個名稱,然后比較兩個返回的函數(換句話說,undefined == undefined,它為TRUE)。 然后會警告True。

其他答案是正確的。 另外,為了進行比較,在您的最后一個警報中,我想您想檢查這些人的姓名是否相同。

alert(person1.name === person2.name);

為此,您可以使用上方的“點語法”訪問每個對象的name屬性。 === (三等號)運算符是使用這種語言進行比較的最佳運算符。 您應該更喜歡標准[unreliable] ==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM