2008-11-19 64 views

回答

11

運營商是「提升」的運營商。這意味着什麼:如果T有運營商,T?將有「解除」對應。

& &和||並不像&和|那樣是真正的運營商 - 例如,它們不能被重載 - 從ECMA規範14.2.2運算符重載:

的重載的二元運算符有: + - * /%& |^< < >> ==!=> <> = < =只有上面列出的運算符可以 超載。特別是,它不是 可以重載成員訪問, 方法調用,或=,& &,|| ??,:,選中,未選中新, typeof運算,如,和是運營商。

同樣,從ECMA規範,14.2.7解禁運營商來說,提升運營商:

對於一元運算符 + ++ - - ! 〜

對於二元運算符 + - * /%& |^< < >>

對於相等運算符 ==!=

對於關係運算符<> < => =

因此,基本上,短路運營商並不限定爲解除運算符。

[編輯:加入嬰兒牀片]

  • 提升運算符:上Nullable<T>編譯器提供的操作員,基於T的運營商 - 例如:在int「+」操作符被「提升」到int? ,定義爲:

    (int?x,int?y)=>(x.HasValue & & y.HasValue)? (x.Value + y.Value):(INT?)空;

  • 運算符重載:提供給定類型的自定義操作執行的行爲;例如decimalDateTime提供各種操作重載

  • 的短路:的&&||(在許多語言,包括C++和C#)的正常行爲 - 即,第二操作數可能不能評價 - 即

    (表達式1,表達式2)=>表達式()? expression2():false;

或者,也許一個簡單的例子:

bool someFlag = Method1() && Method2(); 

如果Method1()返回false,那麼Method2()不執行(因爲編譯器已經知道整體的答案是假的)。這是重要的,如果Method2()有副作用,因爲要保存到數據庫中...

1

運算符「&」是按位運算符,「」是邏輯運算符。 的logcial「AND」操作符不能應用。查閱全文的三態值,僅在twostate。

0

- 另外,邏輯運算符& &以及||。運算符不能超載。

2)按位操作符的原因是因爲它運行在單位,這是一個簡單的1或0。這就是布爾運算基本上是,真與假,1和0

+0

???有什麼理由在這裏下臺嗎? – 2011-07-07 12:22:51

3

有是(& & ||)爲bool?

定義僅僅是邏輯AND,OR包容性,運營商和他們這樣的表現沒有短路運營時間:01

x  y  x & y x | y 
true true true true 
true false false true 
true null null true 
false true false true 
false false false false 
false null false null 
null true null true 
null false false null 
null null null null 
+0

謝謝。或許也可以解釋爲什麼它們被稱爲短路,這些&&和|| ? – badbadboy 2008-11-19 20:40:46

+1

它們是「短路」,因爲它們只在必要時評估邏輯語句中的多個條件。見http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Logical_Operators以獲取更多信息。 – 2008-11-19 21:05:50