關於javascript的一個小問題-邏輯值
阿新 • • 發佈:2018-12-09
今天看一本關於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的結果。