我什么时候初始化JavaScript中的变量与空或不是呢?(When do I initialize

2019-07-03 11:05发布

我已经看到了声明,并设置为undefined和null变量不同的代码示例。 如:

var a; // undefined - unintentional value, object of type 'undefined'
var b = null; // null - deliberate non-value, object of type 'object'

如果遵循这些声明的代码值分配给一个或为b,什么是使用一种类型的声明对另一原因?

Answer 1:

第一个例子不分配给任何变量,所以它隐含指undefined值(见10.5规范的详细信息)。 宣布供以后使用变量时,它通常使用。 有没有必要在必要之前明确指定任何东西给他们。

第二个例子是明确指定null (这实际上是的类型null ,但由于JavaScript规范的一个怪癖,宣称具有类型“对象”)。 它通常用于清除已经存储在现有变量的值。 它可以被看作是更强大的使用null清算价值时,因为它可能覆盖undefined ,而在这种情况下assiging undefined会导致意外的行为。

顺便说一句,那怪癖null是一个很好的理由使用类型检查的更强大的形式:

Object.prototype.toString.call(null); // Returns "[object Null]"


Answer 2:

我不认为有做事情的一个特定的更好的办法,但我倾向于避免不确定的尽可能。 也许这是由于强大的面向对象的背景。

当我尝试模仿的JavaScript OOP,我一般会声明和初始化明确我的变量设置为null(如做OOP语言,当你没有明确地初始化它声明的实例变量)。 如果我不会初始化它们,为什么还要声明它们摆在首位? 当你调试,如果你还没有设置你看一个变量的值,你会看到它的不确定是否申报或不...

我喜欢让undefined的特定行为:

  • 当你调用一个方法,你没有提供任何参数将有一个未定义的值。 有一个可选的参数,实现如果没有定义参数的特定行为的好办法。
  • 延迟初始化...在我的书中未定义的意思是“未初始化:拿来的价值”,而空意思是“初始化,但值为空(例如可能有一个服务器错误?)”
  • 数组:myArray的[的myKey] === NULL如果某个值从未设置此键有此键空值,不确定的。

不过要小心,那myVar == nullmyVar == undefined返回相同的值myVar的是未定义,为null或别的东西。 使用===如果你想知道,如果一个变量是不确定的。



Answer 3:

我刚看到这个链接,澄清了我的问题。 有什么理由在JavaScript空,而不是使用的不确定?

JavaScript进行Web开发指出:“在定义,是为了以后持有对象的变量,最好是初始化变量设置为null,而不是别的。这样一来,你可以明确地检查空值,以确定如果变量已经充满了在稍后的时间的对象引用“。



Answer 4:

我会明确选择空,不创建一个对象,其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);

设置null也保证了良好的可读性,以确定数据类型(对象),导致

object
object
undefined

源(专业的JavaScript的Web开发者第3版):

当定义,是为了以后持有对象的变量,最好是初始化变量设置为null,而不是别的。 这样,你可以明确地检查空,以确定是否该变量在以后的时间被充满了对象引用,如本例中的值:

if (foo2 != null){
    //do something with foo2
}

未定义的值是空的衍生物,所以ECMA-262将它们定义为表面上等于如下:

console.log(null == undefined); // prints true
console.log(null === undefined);// prints false


Answer 5:

null是一个对象。当东西是不确定的是什么..它是不是一个对象,既不是字符串,因为它没有被定义尚未..明显..然后那简直是无功能的属性..

例:

声明使用var变量,但从未对其进行设置。

var foo; 
alert(foo); //undefined.

您尝试你从未设置的对象上访问属性。

var foo = {};
alert(foo.bar); //undefined

您尝试访问从未提供参数。

function myFunction (foo) {
  alert(foo); //undefined.
}


文章来源: When do I initialize variables in JavaScript with null or not at all?