1. 程式人生 > >lua的a and b or c等於js的a?b:c,但不等於js的a && b || c

lua的a and b or c等於js的a?b:c,但不等於js的a && b || c

先來說lua:

lua中並沒有a ? b : c這樣的語法,因為lua沒有這樣的運算子,但是lua可以用 a and b or c來實現js或c語言的a ? b : c的功能。

也就是說lua的a and b or c和js的a ? b : c的功能是一樣的。

為什麼呢,這個要從兩個方面來說:

1.lua中false的判斷條件來說,lua中除了false和nil之外,其他所以資料,包括0、空字串等都是true。

2.lua中and的定義是,若a為false,則返回a,否則返回b。

   or的定義是,若a為true,則返回a,否則返回b。

基於這兩個條件,lua中可以用a and b or c來實現其他語言a ? b : c的功能。

再來說JS:

js實現的a && b || c會不會也像lua中的功能一樣呢?答案是不會。

js中的“與”和“或”的定義與lua中是一樣的,但是就是因為js中false的判斷條件為false的情況與lua不一樣,所以才會導致結果的不同。

js中判斷條件為false的情況是0,-0,null,"",false,undefined,NaN。

所以只要b的值為上述中的一個,a && b || c返回的值是c。

如a為true,b為0,c為3:

var d = a && b || c

d的值是3。

這就得不到我們想要的結果。

最後,補充一句:

a && b 等於 a ? b : a。

x || c 等於 x ? x : c。

所以結合在一起,a && b || c就是

a ? b : a ? a ? b : a : c

再簡化為: a ? b ? b : c : c。