2017-10-06 109 views
0

我非常困惑的Javascript的能力處理事件不按順序。在windows/chrome上,下面的代碼輸出以控制對象,該對象在被更改之前已經更改,但是隻輸出該類將顯示未更改的類。有人可以解釋一下這個規則是什麼規定嗎?我不知道如何預測在什麼狀態下可以看到我的物體。Javascript無法運行

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <title>Table Schema</title> 
 
</head> 
 

 
<body> 
 
    <a href="#" class="first_class" onclick="checkClass(this)">I am supposed to be first_class!</a> 
 
    <script> 
 
    function checkClass(obj) { 
 
     console.log(obj); 
 
     console.log(obj.className); 
 
     if (obj.className == 'first_class') { 
 
     obj.className = 'second_class'; 
 
     } 
 
    } 
 
    </script> 
 
</body> 
 

 
</html> 
 
<html>

+0

用字符串表示第一課,obj顯示最新值,而不是當時的快照。 https://stackoverflow.com/questions/30150469/why-console-log-displays-incorrect-objects-values – epascarello

回答

0

obj值是一個reference to an object

obj.className的值是一個字符串,然後它是一個不同的字符串。

Some consoles are asyncronous。如果它們正在渲染一個對象,那麼對象中的數據會發生變化,您將看到更新後的數據。

字符串沒有辦法改變,字符串是不可變的,所以如果你傳遞一個字符串,異步並不重要。

如果您想避免看到更新的對象,請參閱this question

+0

謝謝@Quentin,這是有幫助的。我會研究是否可以在我的用例中傳遞字符串。有沒有辦法更可靠地輸出對象? –

+0

@RobynWyrick - 查看答案的最後一句。 – Quentin

+0

謝謝。跟隨鏈接,並應該工作。我不得不同意Mikulas的看法,從程序員的角度來看,我想不出任何情況下控制檯的這種行爲會更受歡迎。 –