當筆者剛進入 js 的世界的時候,一直為它的靈活寫法感到著迷,同時也有一些疑惑
希望當物件存在時,得到其屬性,可以這麼寫 parent && parent.child,為什麼這個返回的不是乙個布林值,正如 c 語言所表現的。
筆者翻閱 es 5,得到es5/表示式/二元邏輯運算子找到如下答案。
二元邏輯運算子
logicalandexpression :
bitwiseorexpression
logicalandexpression && bitwiseorexpression
語義:產生式 logicalandexpression : logicalandexpression && bitwiseorexpression 按照下面的過程執行:
令 lref 為解釋執行 logicalandexpression 的結果。
令 lval 為 getvalue(lref)。
如果 toboolean(lval) 為 false,返回 lval。
令 rref 為解釋執行 bitwiseorexpression 的結果。
返回 getvalue(rref)。
如果左表示式執行後不能轉化為 false,那麼返回右表示式的value,其中轉化過程 toboolean 規則如下
代入parent && parent.child
可以知道當 parent 是乙個物件時,toboolean 能使它轉化為 true,則返回parent.child
的值。
上圖中 getvalue 的轉化過程比較複雜,簡述就是返回其 [[get]] 或者 [[value]] 的值。
js中的邏輯與( )和邏輯或( )
結果為true時 取最後一項的值 結果為false時 去第乙個為false的值 結果為true時 取 第乙個為true的值 結果為false時 取最後一項的值 var aa 1 2 3 4 4 整個表示式為true 返回 最後一項 var bb 1 2 null undefined 4 null 整...
js中的邏輯與( )和邏輯或( )
發布者 博主 在2014年9月13日 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boolean 後...
js中的邏輯與( )和邏輯或( )
之前有乙個同事去面試,面試過程中碰到這樣乙個問題 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boo...