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

https://blog.csdn.net/u013654125/article/details/79741929

先來說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。
————————————————
版權聲明:本文爲CSDN博主「_大豬」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013654125/article/details/79741929

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章