為什麼區分rhs與lhs是一件重要的事情?
因為在變數沒有宣告(在任何作用域都找不到該變數的情況下),這兩種查詢的行為是不一樣的.
function foo (a) {
console.log(a + b);
return a + b;
foo(2);
第一次對b進行rhs查詢是找不到該變數的.也就是說這是乙個"未宣告"的變數.
如果在rhs的所有巢狀的作用域查詢中都無法找到該變數,js引擎就會丟擲乙個referenceerror異常. referenceerror是乙個重要的異常.
相較之下, 當引擎執行 lhs 查詢時, 如果在頂層( 全域性作用域) 中也無法找到目標變數,
全域性作用域中就會建立乙個具有該名稱的變數, 並將其返還給引擎, 前提是程式執行在非 「 嚴格模式」 下。
「 不, 這個變數之前並不存在, 但是我很熱心地幫你建立了乙個。」
來自 你不知道的js
js中 與 區別
運算子稱作相等,用來檢測兩個運算元是否相等,這裡的相等定義的非常寬鬆,可以允許進行型別轉換 用來檢測兩個運算元是否嚴格相等 1 對於string,number等基礎型別,和 是有區別的 不同型別間比較,之比較 轉化成同一型別後的值 看 值 是否相等,如果型別不同,其結果就是不等 同型別比較,直接進行...
js中 與 的區別
為了減少概念混淆,應該把 稱作 得到或者賦值 稱作 相等 稱作 嚴格相等 相同點 它們兩個運算子都允許任意型別的的運算元,如果運算元相等,返回true,否則返回false 不同 運算子稱作相等,用來檢測兩個運算元是否相等,這裡的相等定義的非常寬鬆,可以允許進行型別轉換 用來檢測兩個運算元是否嚴格相等...
js中 與 的區別
為了減少概念混淆,應該把 稱作 得到或者賦值 稱作 相等 稱作 嚴格相等 相同點 它們兩個運算子都允許任意型別的的運算元,如果運算元相等,返回true,否則返回false 不同 1 如果兩個值型別相同,再進行三個等號 的比較 2 如果兩個值型別不同,也有可能相等,需根據以下規則進行型別轉換在比較 1...