我想問一下爲什麼爲什麼 「警報(3> 2> 1)」 警惕 「假」
alert(3>2>1); // (1)
在JavaScript中返回FALSE。
我知道,正確的是:
alert(3>2 && 2>1); // (2)
但代碼1應返回一個錯誤信息或者是TRUE!這個等式返回FALSE是否有特定的原因?
我想問一下爲什麼爲什麼 「警報(3> 2> 1)」 警惕 「假」
alert(3>2>1); // (1)
在JavaScript中返回FALSE。
我知道,正確的是:
alert(3>2 && 2>1); // (2)
但代碼1應返回一個錯誤信息或者是TRUE!這個等式返回FALSE是否有特定的原因?
第一個3>2
的計算結果爲TRUE,可能會被隱式轉換爲1,所以最終結果爲,這是FALSE。
您可能需要在此輸入錯誤,但Javascript輸入非常弱,因此它會嘗試執行隱式轉換,而不會抱怨。
編輯:
所以,你問爲什麼編程語言的語法並不總是與數學符號一致?我會說(1)他們有不同的優先級,(2)編譯器以另一種方式做更有意義。
這種情況並不少見,但:
x = 3
(分配)x >> 1
(位位移)a | b
(按位或)。這樣的例子不勝枚舉...
它正在評估,如:
+(3>2) > 1
這是一樣的:
+(true) > 1
這總算是:
1 > 1 = false
但是,嘿,至少3 > 2 > 0
將工作;)
如果您添加括號顯示JavaScript是如何解釋它,它就會更加清晰:
alert((3 > 2) > 1);
讓我們除了選擇這個。首先,它評估3 > 2
。是的,三個大於兩個。因此,你現在有這樣的:
alert(true > 1);
true
被強制轉化爲數字。這個數字恰好是1
。 1 > 1
顯然是錯誤的。因此,其結果是:
alert(false);
是的傢伙,我知道什麼是發生。我在問爲什麼..他們爲什麼不解決這個問題? – George 2011-05-01 23:09:33
@George - ...因爲它沒有損壞。 – 2011-05-01 23:12:55
修復什麼?它的工作原理應該如此。 – 2011-05-01 23:14:17
讓我們打破它從根本上,它的兩個>與相同優先級的運營商,所以哪一個先運行?
JavaScript有運算符優先級分配,作爲每個從 MDN
比大下載操作優先級表(>)(在表11)運行從左到右,所以3> 2運行第一其評估爲TRUE
所以現在我們有TRUE> 1,
JavaScript時看到兩種不同類型的值(布爾和數量在這裏)爲了進行比較,類型強制會發生,這意味着TRUE將被裹挾(類型轉換)爲1,
所以的JavaScript將運行1> 1,這將導致爲FALSE
我的猜測是:(1)被解釋爲'真> 1'但是這是一個大膽猜測 – Zlatev 2011-05-01 23:05:30