var a={};b={}; 是否可以簡寫為var a=b={}; ?
這兩種寫法是有區(qū)別的。
本題涉及了兩個知識點:變量的作用域和比較運算符。
變量的作用域:
兩種寫法分別聲明了兩個變量,它們的作用域是一致的。a 是當(dāng)前作用域變量(變量在函數(shù)外定義,即為全局變量;在函數(shù)內(nèi)定義,即為局部變量),而 b 是全局變量。
比較運算符:
var a=b={}; a 和 b 均指向了同一個地址。它們是 絕對相等,即 a==b a===b 均為 true。
var a={};b={}; a b 指向了不同地址。它們 不是絕對相等。
是否相等可以參考 https://dorey.github.io/JavaScript-Equality-Table/
ps.可以通過下面的庫比較指向了不同地址的對象是否相等 http://underscorejs.org/#isEqual
用法
var stooge = {name: 'moe', luckyNumbers: [13, 27, 34]};
var clone = {name: 'moe', luckyNumbers: [13, 27, 34]};
stooge == clone;
=> false
_.isEqual(stooge, clone);
=> true
正確的簡寫方案:
var a={};b={};
等價于
b = {}; // 全局
var a = b;