程序员是那般区分Null和Undefined

By admin in 4858美高梅 on 2019年3月27日

【对于《JS高级程序设计》的知晓】

【对于《JS高级程序设计》的明白】

Null类型

Null类型

“尽管未开始化的变量会自动被赋值undefined值,但显式地初步化变量仍旧是明智的精选。假如能够一呵而就这点,那么当typeof操作符再次回到‘undefined’值时,我们就精晓被检测的变量还不曾被声称,而不是不曾开头化。”

“固然未先导化的变量会活动被赋值undefined值,但显式地初阶化变量还是是明智的接纳。假若能够实现这点,那么当typeof操作符重临‘undefined’值时,大家就知道被检查和测试的变量还尚未被声称,而不是从未有过伊始化。”

Null类型是首个只有3个值的数据类型,那个分外的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也多亏利用typeof操作符检查和测试null值时会再次回到”object”的由来,如上面的例证所示:

Null类型是第四个唯有三个值的数据类型,那一个卓殊的值是null。从逻辑角度来看,null值表示五个空对象指针,而那约等于利用typeof操作符检查和测试null值时会再次回到”object”的由来,如上面包车型地铁例子所示:

前面一向对那段话不知道,不知道说的毕竟是怎么着看头;明日再一次归来这里,思考这段话,仔细想了须臾间;

此前一直对那段话不知底,不知底说的究竟是什么样看头;今日再也回来那里,思考那段话,仔细想了一晃;

var car = null;

var car = null;

‘显式地开始化变量依然是明智的挑三拣四’那段话是歧义的根源,在此以前被自身驾驭为,展现地伊始化为undefined,那样做导致后边说的就不树立,无论是评释不证明结果或然一样的,因为暗中认可undefined;

‘显式地伊始化变量依然是明智的挑三拣四’那段话是歧义的来自,在此以前被小编知道为,展现地发轫化为undefined,那样做导致前边说的就不创制,无论是申明不证明结果或许一如既往的,因为暗中认可undefined;

alert(typeof car); // “object”

alert(typeof car);    // “object”

而再度领略,应该是:开头化为一个非undefined的值,那样就确立了;能够用空的占位符,如:

而再一次明白,应该是:初阶化为2个非undefined的值,那样就创立了;能够用空的占位符,如:

程序员是那般区分Null和Undefined。假若定义的变量准备在现在用于保存对象,那么最棒将该变量伊始化为 null
而不是其余值。那样一来,只要直接检查null值就能够清楚相应的变量是或不是早已保存了三个指标的引用,如下边包车型客车例子所示:

一经定义的变量准备在前几天用于保存对象,那么最佳将该变量先导化为 null
而不是任何值。
那样一来,只要直接检查null值就足以掌握相应的变量是不是曾经保存了三个对象的引用,如上边包车型客车例证所示:

  1. String类型:var str = ”;
  2. Number类型:var num = 0;
  3. Boolean类型:var boo = true/false;
  4. Object类型:var obj = {};
  5. 数组:var arr = [];
  1. String类型:var str = ”;
  2. Number类型:var num = 0;
  3. Boolean类型:var boo = true/false;
  4. Object类型:var obj = {};
  5. 数组:var arr = [];

if (car != null){

if (car != null){

情趣正是,使用变量的时候,要对变量进行开头化二个非undefined的值,那样前边大家在用typeof举办检测,只要重回undefined就认为是未表明的变量是确立的

情趣正是,使用变量的时候,要对变量进行起初化二个非undefined的值,那样后边大家在用typeof举行检查和测试,只要重返undefined就觉着是未评释的变量是确立的

// 对car对象实行某些操作

// 对car对象实施某个操作

【严峻相等和undefined】

【严谨相等和undefined】

}

}

var name;

if(name === undefined){
 //执行语句
}else{
 //不执行的语句
}
var name;

if(name === undefined){
 //执行语句
}else{
 //不执行的语句
}

实在,undefined值是派生自null值的,因而ECMA-262规定对它们的相等性测试要回到true:

实质上,undefined值是派生自null值的,因而ECMA-262规定对它们的相等性测试要赶回true:

在意:那里不可不选择严厉相等操作符(===)而不是正规十分操作符(==),因为undefined==null,约等于name
== undefined会检查和测试name是还是不是null,不过严峻相等不会检讨。

留意:那里不可不选拔严苛相等操作符(===)而不是明媒正娶等于操作符(==),因为undefined==null,约等于name
== undefined会检查和测试name是否null,不过严酷相等不会检查。

alert(null == undefined); //true

alert(null == undefined);    //true

【Void操作符和undefined】

【Void操作符和undefined】

此地,位于null和undefined之间的相当于操作符(==)总是回到true,不过要专注的是,这些操作符出于比较的目标会转换其操作数,固然null和undefined有这么的涉嫌,但它们的用途完全不一致。如前所述,无论在怎样情况下都尚未要求把一个变量的值显式地设置为undefined,不过同样的条条框框对null却不适用。换句话说,只要目的在于保留对象的变量还平素不真正保存对象,就应当显著地让该变量保存null值。那样做不仅可以展现null作为空对象指针的老办法,而且也有助于进一步区分null和undefined。

此间,位于null和undefined之间的对等操作符(==)总是回到true,可是要专注的是,这几个操作符出于比较的指标会转换其操作数,纵然null和undefined有这么的涉嫌,但它们的用处完全分裂。如前所述,无论在什么状态下都尚未须求把1个变量的值显式地安装为undefined,不过同样的平整对null却不适用。换句话说,只要意在保留对象的变量还尚未当真保存对象,就应当分明地让该变量保存null值。那样做不仅能够呈现null作为空对象指针的老办法,而且也有助于进一步区分null和undefined。

console.log(void(0));//undefined
console.log(void 0);//undefined
console.log(void(0));//undefined
console.log(void 0);//undefined

Undefined类型

Undefined类型

所以:

所以:

Undefined类型唯有多个值,即特殊undefined。在行使var评释变量但未对其再说初叶化时,这些变量的值就是undefined,例如:

Undefined品类只有三个值,即特殊undefined。在利用var评释变量但未对其再说起先化时,那些变量的值便是undefined,例如:

if(x === void 0) {
    // 执行这些语句
}
// 没有声明y
if(y === void 0) {
    // 抛出一个RenferenceError错误(与`typeof`相比)
}
if(x === void 0) {
    // 执行这些语句
}
// 没有声明y
if(y === void 0) {
    // 抛出一个RenferenceError错误(与`typeof`相比)
}

var message;

var message;

明亮:能够直接把void 0当成undefined看待

接头:能够一贯把void 0当成undefined看待

alert(message == undefined); //true

alert(message == undefined); //true

【undefined和null的差别点】

【undefined和null的不一致点】

这么些事例只申明了变量message,但未对其进展早先化。比较那个变量与undefined字面量,结果声明它们是相等的。那些事例与下部的例子是等价的:

以此事例只注明了变量message,但未对其展开开端化。相比那一个变量与undefined字面量,结果评释它们是相等的。这一个例子与下部的例子是等价的:

  1. null是一个字面量(不是性质),undefined是大局对象的3个天性
  2. typeof null; //object
  3. typeof undefined; //undefined
  4. null === undefined; // false
  5. null == undefined; // true
  6. isNaN(1 + null); //false
  7. isNaN(1 + undefined); //true
  1. null是贰个字面量(不是性质),undefined是全局对象的一个天性
  2. typeof null; //object
  3. typeof undefined; //undefined
  4. null === undefined; // false
  5. null == undefined; // true
  6. isNaN(1 + null); //false
  7. isNaN(1 + undefined); //true

var message = undefined;

var message = undefined;

alert(message == undefined); //true

alert(message == undefined); //true

本条事例使用undefined值显式初步化了变量message。但大家没有须要这么做,因为未经初叶化的值暗许就会收获undefined值。

4858美高梅,其一例子使用undefined值显式开端化了变量message。但我们一直不要求那样做,因为未经开端化的值暗中认可就会博得undefined值。

诚如而言,不存在必要显式地把2个变量设置为undefined值的意况。字面值undefined的关键指标是用以相比,而ECMA-262第壹版在此以前的版本中并没有显著那么些值。第三版引入那么些值是为着正式区分空对象指针与未经早先化的变量。

貌似而言,不设有供给显式地把3个变量设置为undefined值的情况。字面值undefined的首要指标是用以相比较,而ECMA-262第一版在此以前的版本中并不曾明确那几个值。第贰版引入那几个值是为着正式区分空对象指针与未经开头化的变量。

但是,包蕴undefined值的变量与没有定义的变量还是不一样的。看看上边这一个例子:

唯独,包罗undefined值的变量与从不定义的变量照旧不均等的。看看上边那些事例:

var message; // 那些变量证明之后暗中认可取得了undefined值

var message; // 这几个变量证明之后暗中同意取得了undefined值

// 下边这么些变量并不曾表明

// 下边那几个变量并不曾申明

// var age

// var age

alert(message); // “undefined”

alert(message);    // “undefined”

alert(age); // 发生错误

alert(age);    // 发生错误

运营以上代码,第三个警示框会突显变量message的值,即”undefined”。而第一个警告框——由于传递给alert()函数的是平素不注明的变量age——则会促成一个荒谬。对于尚未评释过的变量,只可以执行一项操作,固然用typeof操作符检测其数据类型(对未经注脚的变量调用delete不会招致错误,但如此做没什么实际意义,而且在严酷情势下真的会造成错误)。

运营以上代码,第三个警示框会呈现变量message的值,即”undefined”。而第②个警告框——由于传递给alert()函数的是从未有过声明的变量age——则会招致三个不当。对于从未注解过的变量,只好实行一项操作,虽然用typeof操作符检测其数据类型(对未经注解的变量调用delete不会导致错误,但那样做没什么实际意义,而且在严峻情势下真的会招致错误)。

但是,令人困惑的是:对未初步化的变量执行typeof 操作符会重临 undefined
值,而对未申明的变量执行typeof操作符同样也会再次来到undefined值。来看上面包车型的士例子:

然则,令人质疑的是:对未初阶化的变量执行typeof  操作符会再次来到  undefined
 值,而对未表明的变量执行typeof操作符同样也会再次回到undefined值。来看上面包车型地铁例证:

var message; // 那些变量申明之后私下认可取得了undefined值

var message; // 这一个变量表明之后默许取得了undefined值

// 上面这些变量并不曾申明

// 下边那么些变量并没有注明

// var age

// var age

alert(typeof message); // “undefined”

alert(typeof message);    // “undefined”

alert(typeof age); // “undefined”

alert(typeof age);    // “undefined”

结果申明,对未发轫化和未证明的变量执行typeof操作符都回到了undefined值;那几个结果有
其逻辑上的创立。因为即便那二种变量从技术角度看有本质分歧,但实则无论对哪个种类变量也不容许进行真正的操作。

结果申明,对未开端化和未评释的变量执行typeof操作符都回到了undefined值;那一个结果有
其论理上的客观。因为固然那三种变量从技术角度看有本质不一致,但实在无论对哪一类变量也不大概实施真正的操作。

提示:

提示:

尽管未初阶化的变量会自行被授予undefined值,但显式地初始化变量仍然是明智的挑三拣四。借使能够完结那或多或少,那么当typeof操作符重回”undefined”值时,大家就驾驭被检查和测试的变量还尚未被声称,而不是尚未初阶化。

固然未开端化的变量会自行被赋予undefined值,但显式地开端化变量依然是明智的挑三拣四。假诺能够做到那点,那么当typeof操作符重临”undefined”值时,大家就清楚被检查和测试的变量还尚无被声称,而不是一贯不伊始化。

本文由web前端精髓为你提供(喜欢本身的稿子能够扫一扫图中二维码关怀本人!)

4858美高梅 1

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有