2011-12-19 42 views
16

JavaScript是不嚴格的類型語言如Java,例如。JavaScript的類型轉換:(真&& 1)VS(真| | 1)

正如我們所知,這對語境依賴性轉換結果的值:

"2" + "3"導致"23"

"2" * "3"結果6

這是理解相當明確和確定。

我只是嘗試以下表達式和糊塗了:

true && 1結果1
true || 1結果true

爲什麼第一次給數和第二給布爾?

考慮到JavaScript轉換規則,我預計在兩種情況下都會得到boolean值,這是由於boolean表達式的上下文。

回答

8

檢查Douglas Crockford's site,它說:

的& &操作通常被稱爲邏輯和。它也可以叫做 後衛。如果第一個操作數爲假,空,未定義,「」(空 字符串)或數字0,則返回第一個操作數。否則, 它返回第二個操作數。這提供了編寫 空檢查的便捷方式:

var value = p && p.name; /* The name value will only be retrieved from 
p if p has a value, avoiding an error. */ 

的||運算符通常是 ,稱爲邏輯或。它也可以被稱爲默認。如果第一個操作數 爲false,null,未定義,「」(空字符串)或數字0, ,則返回第二個操作數。否則,它返回第一個 操作數。這提供了一種方便的方式來指定默認值:

value = v || 10; /* Use the value of v, but if v doesn't have a value, 
use 10 instead. */ 
+0

感謝你的解釋 - 這是關於警衛和默認的有趣點 – sergionni 2011-12-19 10:42:07

+0

不客氣。總而言之,我會建議閱讀道格拉斯的JavaScript頁面而不是規範。在我看來,這很容易理解。 http://javascript.crockford.com/ – 2011-12-19 10:48:24

+0

很好的解釋!我希望我能給你+3。 – 2013-05-11 18:41:57

9

quote MDC;

&&;如果可以將其轉換爲false,則返回expr1;否則,返回expr2。因此,當與布爾值一起使用時,如果兩個操作數都爲真,則&&返回真;否則,返回false。
||;如果可以將其轉換爲true,則返回expr1;否則,返回expr2。因此,當與布爾值一起使用時,||如果任一操作數爲真,則返回true;如果兩者都是假的,則返回false。

因此,在第一示例中,被返回1因爲expr1不能被轉換爲false。

在第二示例中,true可以轉換爲真實的,所以它的返回。

+0

非常感謝,其實你提醒我,Mozilla的資源,如JavaScript文件 – sergionni 2011-12-19 10:44:11

0

你可以做其他的東西太多,如:

var myVar = Math.random() > 0.5; 

myVar && doFunc(); 

這是一樣的

if(myVar) { 
    doFunc(); 
} 

||基本意思是「如果第一件事情是假的,到第二個」

&&基本意思是「如果第一件事情是真實的,轉到第二個」

這就是爲什麼你看到這樣的事情在函數的頂部:

function myFunction(options) { 
    options = options || {}; 
} 

這意味着:如果選擇是falsey,使其{}

9

這有什麼好做類型轉換。

||返回第一個真值操作數。 1 || true會給你1

&&返回第一個falsy操作數,或者第二個操作數,如果兩者都是truthy。

見58頁的ECMAScript specification

+0

非常有價值謝謝你,從來不知道關於「開始到最後」的方針 – sergionni 2011-12-19 10:35:42

0

您正在對使用邏輯評估(其中&,||)執行的操作(*/+操作符會執行此操作)進行混淆。

+0

能不會得到你的答案 – sergionni 2011-12-19 10:46:15

相關問題