1. 程式人生 > >關於javascript的一個小問題-邏輯值

關於javascript的一個小問題-邏輯值

今天看一本關於js的書籍,其中有一個小案例:利用js+html實現下圍棋操作

其中有段程式碼

var s=((x-9)%9?0:(x-9)/9)+1+(((y-9)%9?0:(y-9)/9)+1)*3;

是判斷19*19棋盤上的各座標點的背景圖片的

通過一個三目運算子實現,很簡單,但剛開始感覺很彆扭,理解不了

因為覺得(x-9)%9不是一個邏輯判斷語句,怎麼可以這樣用,但程式碼沒有錯,實現了預想的效果,百思不得其解

百度到了一個帖子,有回答說:

(x-9)%9?0:(x-9)/9)對(x-9)取9的模運算,如果是為0取0,如果非0,取(x-9)/9的結果。 記為 x (((y-9)%9?0:(y-9)/9) 與上類似。 記為 Y 最終 s = X+1+(Y+1)* 3  //錯誤

自己試著以此修改程式碼如下:

var s=((x-9)%9==0?0:(x-9)/9)+1+(((y-9)%9?0:(y-9)/9)+1)*3;

看著是舒服多了,但執行後,效果不是自己要的那個

反而是按相反的意思改為var s=((x-9)%9!=0?0:(x-9)/9)+1+(((y-9)%9?0:(y-9)/9)+1)*3; 實現了預想效果

接著百度,得知了一個邏輯值的概念

在js中,只有undefined null “” 0 false 這五個資料型別的邏輯值是false;其他的皆為true

因而,程式碼就好理解了,(x-9)%9或(x-9)%9取餘後值為0,則其邏輯值為false,其它為true

對(x-9)取9的模運算,如果非0,取0;

如果為0,取(x-9)/9的結果。 

對(y-9)取9的模運算,如果非0,取0;

如果為0,取(y-9)/9的結果。