lua的a and b or c等於js的a?b:c,但不等於js的a && b || c
阿新 • • 發佈:2019-02-14
先來說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。