javascript 中null和undefined区分和比较

javascript 中null和undefined区分和比较

Undefined类型

Undefined 类型只有一个值,即特殊 undefined 。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined ,

例如:

var message;
alert(message == undefined); //true

这个例子只声明了变量 message ,但未对其进行初始化。比较这个变量与 undefined 字面量,结果表明它们是相等的。这个例子与下面的例子是等价的:

var message = undefined;
alert(message == undefined); //true

这个例子使用 undefined 值显式初始化了变量message 。但我们没有必要这么做,因为未经初始化的值默认就会取得 undefined 值。

一般而言,不存在需要显式地把一个变量设置为undefined 值的情况。字面值 undefined 的主要目的是用于比较,而ECMA-262第3版之前的版本中并没有规定这个值。第3版引入这个值是为了正式区分空对象指针与未经初始化的变量。

不过,包含 undefined 值的变量与尚未定义的变量还是不一样的。看看下面这个例子:

 var message; // 这个变量声明之后默认取得了undefined值
// 下面这个变量并没有声明
// var age
alert(message);  // "undefined"
alert(age);  // 产生错误

运行以上代码,第一个警告框会显示变量message 的值,即 “undefined” 。而第二个警告框——由于传递给 alert() 函数的是尚未声明的变量age ——则会导致一个错误。对于尚未声明过的变量,只能执行一项操作,即使用 typeof 操作符检测其数据类型(对未经声明的变量调用delete 不会导致错误,但这样做没什么实际意义,而且在严格模式下确实会导致错误)。

然而,令人困惑的是:对未初始化的变量执行typeof 操作符会返回 undefined 值,而对未声明的变量执行typeof操作符同样也会返回undefined值。来看下面的例子:

var message; // 这个变量声明之后默认取得了undefined值
// 下面这个变量并没有声明
// var age
alert(typeof message);  // "undefined"
alert(typeof age);  // "undefined"

结果表明,对未初始化和未声明的变量执行 typeof 操作符都返回了 undefined 值;这个结果有 其逻辑上的合理性。因为虽然这两种变量从技术角度看有本质区别,但实际上无论对哪种变量也不可能执行真正的操作。

提示:

即便未初始化的变量会自动被赋予undefined值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回”undefined”值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。

Null类型

Null 类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看, null 值表示一个 空对象指针 ,而这也正是使用 typeof 操作符检测 null 值时会返回 “object” 的原因,如下面的例子所示:

 var car = null;
 alert(typeof car);  // "object"

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用,如下面的例子所示:

if (car != null){
// 对car对象执行某些操作
}
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true:
alert(null == undefined);  //true

这里,位于 null 和 undefined 之间的相等操作符(==)总是返回 true ,不过要注意的是,这个操作符出于比较的目的会转换其操作数,尽管null 和 undefined 有这样的关系,但它们的用途完全不同。如前所述,无论在什么情况下都没有必要把一个变量的值显式地设置为 undefined,可是同样的规则对 null 却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存 null 值。这样做不仅可以体现null 作为空对象指针的惯例,而且也有助于进一步区分 null 和 undefined。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Javascript 中 null、NaN和undefined的区别总结

    1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 代码 复制代码 代码如下: var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; var a7 = NaN; var a8 = undefined; alert(typeof a); //显示"u

  • JavaScript Undefined,Null类型和NaN值区别

    一 Undefined 类型 只有一种值 undefined 以下三种情况typeof 返回类型为undefined 1. 当变量未初始化时 2. 变量未定义时 3. 函数无明确返回值时(函数没有返回值时返回的都是undefined) undefined 并不等同于未定义的值 typeof 并不真正区分是否是未定义 看以下示例代码: var oTemp; alert(typeof oTemp); // outputs "undefined" alert(typeof oTemp2);/

  • js判断undefined类型,undefined,null, 的区别详细解析

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断 var reValue=window.showModalDialog("","","");   if (reValue== undefined){  alert("undefined"); } 发现判断不出来,最后查了下资料要用typeof 方法:

  • JS基础之undefined与null的区别分析

    于是,细想之后,写下本文,请各位大侠拍砖. 总所周知: null == undefined 但是: null !== undefined 那么这两者到底有啥区别呢? null 这是一个对象,但是为空.因为是对象,所以 typeof null 返回 'object' . null 是 JavaScript 保留关键字. null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值: 表达式:123 + null结果值:123 表达式:123 * null结果值:0 und

  • 区分JS中的undefined,null,"",0和false

    在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等.在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢? 其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean

  • JavaScript null和undefined区别分析

    一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理.于是,细想之后,写下本文,请各位大侠拍砖. 总所周知:null == undefined 但是:null !== undefined 那么这两者到底有啥区别呢? 请听俺娓娓道来... null 这是一个对象,但是为空.因为是对象,所以 typeof null 返回 'object' . null 是 JavaScript 保留关键字. null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正

  • javascript中的undefined 与 null 的区别 补充篇

    之前我们发不过类似的文章JavaScript null和undefined区别分析 JavaScript Undefined,Null类型和NaN值区别 先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的时候只需使用var关键字即可.如果是像C这样的强类型语言, 声明变量的时候如果没有指定初始值,那么会给他一个默认值,比如int变量的默认值是0.但是在Javascript这样的弱类型语言中,没有办法确定到底该给这样的变量一个什么样

  • javascript 中null和undefined区分和比较

    javascript 中null和undefined区分和比较 Undefined类型 Undefined 类型只有一个值,即特殊 undefined .在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined , 例如: var message; alert(message == undefined); //true 这个例子只声明了变量 message ,但未对其进行初始化.比较这个变量与 undefined 字面量,结果表明它们是相等的.这个例子与下面的例子是等价

  • JavaScript中null与undefined分析

    1.javascript中定义而未赋初值的变量,其默认值为undefined. eg. 复制代码 代码如下: var testundefined; if(undefined==testundefined){ alert("undefined==testundefined");//output undefined==testundefined } 2.javascript中null和undefined是相等的. 复制代码 代码如下: var testNull=null; var test

  • JavaScript中Null与Undefined的区别解析

    在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undefined类型只有一个值,即undefined.当声明的变量还未被初始化时,变量的默认值为undefined. Null类型也只有一个值,即null.null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象. 复制代码 代码如下: var oValue;  alert(oValue ==

  • 浅谈JavaScript中null和undefined

    先说null,它表示一个特殊值,常用来描述"空值".对null执行typeof运算,结果返回字符串"object",也就是说,可以将null认为是一个特殊的对象值,含义是"非对象"(感觉怪怪的).实际上,通常认为null是它自有类型的唯一一个成员,它可以表示数字.字符串和对象是"无值"的. JavaScript还有第二个值来表示值的空缺,就是undefined啦,用未定义的值表示更深层次的"空值".unde

  • JavaScript中直接写undefined的用法剖析

    目录 介绍 原因 解决 结语 介绍 众所周知,在JavaScript 语言中,一个没有被赋值的变量会有个默认值 undefined ,而 undefined 作为全局对象的一个属性经常会用作一些赋值返回,逻辑判断等业务场景中.可本期要说的是,尽量不要直接去拼写 undefined 了,因为那是不太严谨的行为,可能出现很多意外情况. 原因 我们经常在判断某个变量是否等于 undefined ,如下: function test(value) { if (value === undefined) {

  • JavaScript的null和undefined区别示例介绍

    先说说undefined: Javascript中的变量是弱类型的, 所以声明变量的时候只需使用var关键字即可.如果是像C这样的强类型语言, 声明变量的时候如果没有指定初始值,那么会给他一个默认值,比如int变量的默认值是0.但是在Javascript这样的弱类型语言中,没有办法确定到底该给这样的变量一个什么样的默认值,比如我声明一个变量 var v1; 是给他false还是0,或者是'' ? 因为没有类型,所以无法确定. 在Javascript中对于这种生命后没有给定初始值的变量,就给他一个

  • js删除对象/数组中null、undefined、空对象及空数组方法示例

    这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题.为了兼具所有的种类类型,封装了方法,代码如下: let obj = { a: { a_1: 'qwe', a_2: undefined, a_3: function (a, b) { return a + b; }, a_4: { a_4_1: 'qwe', a_4_2: undefined, a_4_3: function (a, b) { return a +

  • javascript权威指南 学习笔记之null和undefined

    复制代码 代码如下: <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>javascript之null和undefined</title> </head> <body> <script type="

  • JavaScript中严格判断NaN的方法

    我也在FreeCodeCamp上碰到这样一道题: 删除数组中的所有假值. 在JavaScript中,假值有false.null.0."".undefined 和 NaN. 对于NaN的判断,JS提供了函数isNaN().但是使用isNaN()函数只能判断变量是否非数字,而无法判断变量值是否为NaN. 于是,应用NaN的性质: > NaN === NaN; false //永远返回false 我们就能使用 === 判断变量是否为NaN.只需判断变量是否与自身相等,若不等的情况,该变

随机推荐