2012-03-09 106 views
1

下面的函數使用Short Circuit Operator返回0默認:這個函數中返回0的值是什麼?

function custNumParse(str){ 
    return str*1||0; 
} 

我不知道何時會返回第二個(我的意思是,我知道它會何時str*1無法進行評估,以true) ,但我不確定當乘以1時什麼輸入可以產生該輸出。

我知道falsish的值是0, "", false, null, undefined, NaN,但這對我沒有太大的幫助。

換句話說,我無言以對,當我用物體或布爾該功能,等等。我知道我可以測試他們都將會發生什麼,但我相信有一個更簡單的方法去

任何想法找到這些傢伙最合適的方式,而不是全部測試它們?

+0

'STR + 1'也可以寫成'+ str'。 – 2012-03-09 22:23:20

+0

@火箭什麼'+ 1'?你的意思是'* 1'? – mithril333221 2012-03-10 03:01:45

+0

是的,我的意思是'str * 1',那是一個錯字。無論如何,你仍然可以寫'+ str'。 – 2012-03-10 18:57:25

回答

5

*運算符僅用於數字,因此任何非數字(或不能轉換爲數字)的運算符將使str*1返回NaN。另外0*1顯然是0

編輯:布爾似乎轉換爲01

false * 1 === 0 
true * 1 === 1 

編輯2:字符串與數字值也將被轉換

"12" * 1 === 12 
"0" * 1 === 0 

EDIT 3:小心用陣列(它們被轉換成字符串,然後整數)。

[] * 1 === 0 
[2] * 1 === 2 
[1,2] * 1 === NaN 
+0

布爾值或使用數字的字符串呢?編輯,因爲你的(或不能轉換爲一個)編輯。哦,我看到了...很好,縮短了很多測試,謝謝:D – mithril333221 2012-03-09 21:55:56

+0

不正確。 '[] * 1'返回'0'。所以他的問題仍然存在,其他類型如何轉換爲數字。例如'true * 1'是'1'。 – 2012-03-09 21:59:10

+0

我有點不對。值將在'*'操作之前轉換爲數字(如果可以的話)。 – 2012-03-09 21:59:14

2

你的答案是類型轉換。值str將被轉換,然後相乘。看到這些例子從http://www.java-samples.com/showtutorial.php?tutorialid=819

Number(false) 0 
Number(true) 1 
Number(undefined) NaN 
Number(null) 0 
Number("5.5") 5.5 
Number("56") 56 
Number("5.6.7") NaN 
Number(new Object()) NaN 
Number(100) 10 

所以"5.5"*1是真實的。

+0

該鏈接是非常有用的,我留下了多少時間,它會保存我早晚多少時間 – mithril333221 2012-03-09 22:04:36

+0

請注意,鏈接會談** **顯式**類型轉換在JavaScript中。你當前的代碼是**隱式**類型轉換。 – 2012-03-09 22:06:00

+0

感謝您的警告,我會結合您的鏈接與'Rocket'的回答,輕鬆知道誰將轉向'NaN' :) – mithril333221 2012-03-09 22:08:34

1

JavaScript輸入較弱。這意味着當你用1乘以某個東西時,它會嘗試先把它改成數字。

  • 如果你有一個看起來像一個數字的字符串,它會嘗試解釋它。由於乘以1不會對數字做任何事情,所以您將返回該數字。

  • 如果字符串看起來不像一個數字,表達式將失敗並導致NaN。由於NaN是錯誤的,因此它將通過並返回0

  • 有沒有合乎邏輯的方法將對象變成數字,所以最終也會以NaN結束。

  • 至於布爾值,true爲1,false爲0。

那麼函數功能是它試圖解釋參數作爲一個數字,做不到這一點,則返回0