luk*_*nis 3 javascript coding-style
如果我以后知道变量将是对象,我使用:
var obj;
Run Code Online (Sandbox Code Playgroud)
但是如果我将其初始化为null或undefined并不重要:
var obj = null;
Run Code Online (Sandbox Code Playgroud)
要么
var obj = undefined;
Run Code Online (Sandbox Code Playgroud)
对于我个人使用的字符串:
var str = '';
Run Code Online (Sandbox Code Playgroud)
后来我可以做
str += 'some text';
Run Code Online (Sandbox Code Playgroud)
如果我使用null例如我得到"nullsome文本".
null, undefined, empty string or 0
都是falsy
值,以便检查它们是否已定义.如果我的变量将被用作object, dom node, etc
.. ,这是初始化变量的正确方法?
它undefined
默认初始化为,只需使用它,你不必写出来:
var obj;
Run Code Online (Sandbox Code Playgroud)
如果要连接到字符串,请使用''
,对于计数器使用0
...只需使用常识.
在理想情况下,您只需在范围顶部声明变量,如下所示:
var foo, bar, obj, domNode;
Run Code Online (Sandbox Code Playgroud)
所有这些变量都将是undefined
,因为它们的值是undefined
。例如,如果您知道这些变量之一将用作循环中的字符串,而不是编写foo = (foo === undefined ? '' : foo) + 'add this';
,只需编写:
var foo = '', bar, obj, domNode;
Run Code Online (Sandbox Code Playgroud)
如果您打算使用obj
var 作为对象字面量,只需{my: 'objec', vals: 'here'}
在时机成熟时为其赋值,或将其初始化为{}
,然后添加属性obj.as = 'you'; obj[foo] = 'go';
。如果您要分配对 DOM 元素的引用,请保留它undefined
,因为任何分配都只会产生毫无意义的开销。
任何类型的引用(函数对象、数组、对象...)也是如此。只需推迟分配,因为它只会覆盖之前的任何分配。
至于数字,undefined + 123
将得到评估为NaN
,所以在这种情况下,初始化为0
有意义。但是,在循环计数器的情况下:
var foo, i, obj, arr = [1,2,3];
for (i=0;i<arr.length;i++)
{
console.log(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
相当于:
var foo, i= 0, arr = [1,2,3];
for (;i<arr.length;i++)
{
console.log(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
只有后者看起来几乎是肆意的复杂。只要运用你的常识,你就会没事的。
只知道变量声明被提升到作用域的顶部,但赋值不是:
console.log(foo);//undefined
var foo = 123;
console.log(foo);//123
Run Code Online (Sandbox Code Playgroud)
因为它被翻译成:
var foo;
console.log(foo);
foo = 123;
console.log(foo);
Run Code Online (Sandbox Code Playgroud)
那么为什么不编写您的代码,因为它会被引擎解释?
归档时间: |
|
查看次数: |
7419 次 |
最近记录: |