2014-09-20 98 views
0

獲取NaN我正在用控制檯在HTML/JavaScript中做一個項目/遊戲,並且正在放入「ping」。 但是當我運行這段代碼時,我只是得到了「NaN」。當console.log()

function ping(IP){ 
    for (var i = 0; i <= 3; i++) { 
     var start = new Date().getTime(); 
     console.log("64 bytes from " + IP + ": icmp_seq=" + i + " ttl=64 time: " + new Date().getTime() - start); 
    }; 
} 
+0

您的意思是IP是NaN? – 2014-09-20 16:30:01

+5

你應該用括號來包裝'(new Date()。getTime() - start)' – 2014-09-20 16:30:07

+2

閱讀[運算符優先級](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)和[類型轉換](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals)。您的問題可以用圓括號解決。 – 2014-09-20 16:32:09

回答

1

不能直接使用級聯和數學......

" ttl=64 time: " + new Date().getTime() - start); 

所以在括號中添加代碼如下...

console.log("64 bytes from " + IP + ": icmp_seq=" + i + " ttl=64 time: " + (new Date().getTime() - start)); 
3

-引起的隱式此字符串的轉換:

"64 bytes from " + IP + ": icmp_seq=" + i + " ttl=64 time: " + new Date().getTime() 

NaN。您行中的+-從左到右進行評估,所以當您到達-時,您正在評估String - Number。在JS中,這會導致字符串轉換爲數字(如果無法轉換,則爲NaN),這顯然不是您想要的。 NaN - anything仍然是NaN

通過將(new Date().getTime() - start)括在括號中,數字操作首先完成,然後將您加在一起String + Number。這會導致從數字到字符串的轉換,因此您的console.log將按照您的預期工作。

+0

我得到*結果被轉換爲字符串部分*。只是因爲它在pamentalhesis將被評估爲字符串? – mithunsatheesh 2014-09-20 16:43:22

+1

不,但如果你不把它放在括號中,那麼「new Date()。getTime()」將被連接到它左邊的第一個字符串。然後「somelongstring」 - 開始將被評估,首先將「somelongstring」轉換爲一個Number,即NaN。 NaN - 開始是NaN,已記錄。 – folkol 2014-09-20 16:50:50

1
function ping(IP){ 
    for (var i = 0; i <= 3; i++) { 
     var start = new Date().getTime(); 
     var newTime = new Date().getTime() - start; 
     console.log("64 bytes from " + IP + ": icmp_seq=" + i + " ttl=64 time: " + newTime); 
    }; 
}