KMc*_*McA 36 javascript variables null undefined
我已经看到了声明变量并设置为undefined和null的不同代码示例.如:
var a; // undefined - unintentional value, object of type 'undefined'
var b = null; // null - deliberate non-value, object of type 'object'
Run Code Online (Sandbox Code Playgroud)
如果遵循这些声明的代码为a或b赋值,那么使用一种声明而不是另一种声明的原因是什么?
Jam*_*ice 29
第一个示例没有为变量赋值,因此它隐式引用该undefined
值(详见规范中的10.5).它通常在声明变量供以后使用时使用.在必要之前,无需向其明确指定任何内容.
第二个示例是显式分配的null
(实际上是类型null
,但由于JavaScript规范的怪癖,声称具有类型"对象").它通常用于清除已存储在现有变量中的值.null
在清除值时可以看到使用它更加健壮,因为它可能会被覆盖undefined
,并且在这种情况下,分配undefined
会导致意外行为.
顺便说null
一句,这个怪癖是使用更健壮的类型检查形式的一个很好的理由:
Object.prototype.toString.call(null); // Returns "[object Null]"
Run Code Online (Sandbox Code Playgroud)
KMc*_*McA 10
我刚刚看到这个链接澄清了我的问题. 什么原因在JavaScript中使用null而不是undefined?
用于Web开发人员的Javascript声明"在定义稍后要保存对象的变量时,建议将变量初始化为null而不是其他任何东西.这样,您可以显式检查值null以确定变量是否已经在以后填充了一个对象引用."
Evr*_*glu 10
我不认为有更好的做事方式,但我倾向于尽可能避免未定义.也许这是由于强大的OOP背景.
当我尝试使用Javascript模仿OOP时,我通常会将我的变量声明并初始化为null(当您声明实例变量而不显式初始化它时,OOP语言也是如此).如果我不打算初始化它们,为什么甚至首先声明它们?当你调试时,如果你没有为你看的变量设置一个值,你会看到它是未定义的,无论你是否声明它...
我更喜欢保留undefined
特定的行为:
不过要小心,那myVar == null
和myVar == undefined
myVar的是未定义,为null或别的东西返回相同的值.使用===
,如果你想知道一个变量是不确定的.
我将明确选择null,以不创建其ID以后无论如何都会被覆盖的对象:
var foo = {}; // empty object, has id etc.
var foo2 = null; // good practice, // filled with an object reference at a later time
var foo3;// undefined, I would avoid it
console.log(typeof foo);
console.log(typeof foo2);
console.log(typeof foo3);
Run Code Online (Sandbox Code Playgroud)
设置null
还可以确保良好的可读性,以识别数据类型(对象),从而
object
object
undefined
Run Code Online (Sandbox Code Playgroud)
来源(针对Web开发人员的专业JavaScript第三版):
当定义一个打算稍后用于保存对象的变量时,建议将变量初始化为null,而不是其他任何东西。这样,您可以显式检查值null,以确定该变量以后是否已用对象引用填充,例如以下示例:
if (foo2 != null){
//do something with foo2
}
Run Code Online (Sandbox Code Playgroud)
值undefined是null的派生形式,因此ECMA-262将它们定义为表面上相等,如下所示:
console.log(null == undefined); // prints true
console.log(null === undefined);// prints false
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47292 次 |
最近记录: |