JS 邏輯與為何能返回其運算值而非布林值

2022-01-19 01:02:17 字數 918 閱讀 9617

當筆者剛進入 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...