2014-04-01 204 views
3

我從一個Python背景,做一個JavaScript項目後,整個問題就在那裏JavaScript的比較運算符

輸出爲true 這我的猜測是,它運行的第一個運營商並完全無視第二個

和python它將呈現爲false。

我不是關心如何得到這個工作,但它的奇怪的是,它不是在文檔中其唯一的暗示做(0 < X & & X < 3),而不是把它簡單

想我的問題

0 < 5 

將T:所以這是這樣的,如果任何人,甚至可以回答

+0

「簡單」是一個相對術語。讀者可能會發現將「0 <5 <3」解釋爲「0 <5和5 <3」很簡單,但是計算機可能會發現將其解釋爲「(0 <5)<3」更簡單。 – Kevin

回答

5

在JavaScript中,這樣:

0 < 5 < 3 

評價是這樣的:

(0 < 5) < 3 

其轉換爲這樣:

true < 3 

其被進一步轉換到這個(因爲true1在數字上下文中):

1 < 3 

這是真的。


但Python的設計不同。如記錄here,它將此解釋:

0 < 5 < 3 

爲等同於這樣的:

0 < 5 and 5 < 3 

上述表達式可以進一步轉換成這樣:

True and False 

這是錯誤的。

+0

,這是完全意義上的,我只是從來沒有遇到過這個問題導致我只在過去2年的Python。謝謝! – cronicryo

0

在JavaScript中,由左到右Relational operators執行芸香,即1,所以

0 < 5 < 3 

轉換成

1 < 3 

這是真實的。

另一方面,Python中的comparison operations具有相同的優先級。

與C不同,像a < b < c這樣的表達式具有 在數學中是常規的解釋。

2

這是一步一步的評估。當將數字和布爾值與<進行比較時,true變爲1,並且0變爲false。

0 < 5 < 3 // => 
true < 3 // => 
Number(true) < 3 // => 
1 < 3 // => 
true 

spec 11.8.5,規則3,它描述了ToNumber鑄造。

3)如果不是這兩種類型(PX)是字符串和類型(PY)的情況下是字符串,然後

a)設NX是調用ToNumber(PX)的結果。因爲px和py是原始的 值評估順序並不重要。

b)讓ny是調用ToNumber(py)的結果。