Jam*_*Jag 34 javascript object variable-assignment
对JS或它的语法来说并不陌生,但有时候,语言的语义有时会让我感到难过.在今天的工作中,一位同事提到了这一点:
var a = b = [];
Run Code Online (Sandbox Code Playgroud)
是不一样的
var a = [], b = [];
Run Code Online (Sandbox Code Playgroud)
要么
var a = []; var b = [];
Run Code Online (Sandbox Code Playgroud)
因为第一个版本实际上将对空数组的引用分配给a和b.我不能完全接受这一点,但我不确定.你们都觉得怎么样?
Tim*_*own 41
是的,他们不一样.var a = b = []
相当于
var a;
b = [];
a = b;
Run Code Online (Sandbox Code Playgroud)
不仅要声明两者a
并b
获得相同的值(对同一个空数组的引用),b
也不要声明它们.在ECMAScript 5及更高版本的严格模式下,这将抛出一个ReferenceError
; 否则,除非b
范围中已存在变量,否则b
将静默创建为全局对象的属性,并且无论代码在何处,甚至在函数内部,都与全局变量的行为类似.哪个不好.
你很容易看到这个:
(function() {
var a = b = [];
})();
console.log(b); // Shows []
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 10
你的同事是对的:
var a = b = [];
a.push('something');
console.log(b); // outputs ["something"]
Run Code Online (Sandbox Code Playgroud)
但:
var a = [], b = [];
a.push('something');
console.log(b); // outputs []
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9370 次 |
最近记录: |