`
liuguofeng
  • 浏览: 453655 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

在JavaScript开发中,被人问到:null与undefined到底有啥区别?

 
阅读更多

在JavaScript开发中,被人问到:null与undefined到底有啥区别?

一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。

总所周知:null == undefined

但是:null !== undefined

那么这两者到底有啥区别呢?

请听俺娓娓道来...

null

这是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。

null 是 JavaScript 保留关键字。

null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

表达式:123 + null 结果值:123

表达式:123 * null 结果值:0

undefined

undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。

虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

alert('undefined' in window); //输出:true
alert(undefined in window); //输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false

从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。

注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。

undefined参与任何数值计算时,其结果一定是NaN。

随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!

提高undefined性能

当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。

同样,当我们定义一个变量但未赋予其初始值,例如:

var aValue;

这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用

于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。

由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变量,来加快对undefined的比较速度。例如:

function anyFunc()
{
var undefined; //自定义局部undefined变量

if(x == undefined) //作用域上的引用比较

while(y != undefined) //作用域上的引用比较

};

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少于window对象的属性,搜索变量的速度会极大提高。

这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

 

原著:李战(leadzen).杭州-阿里软件 2009-2-18
原址:http://blog.csdn.net/leadzen/archive/2009/02/17/3899392.aspx

分享到:
评论

相关推荐

    JavaScript中undefined和null的区别

    JavaScript中undefined和null的区别 JavaScript两个表示”无”的值:undefined和null。我在平时只是null用的多一点,undefined只是在报错中经常遇到。下面针对这两个数据类型的异同做一下详细的比较。 1.undefined和...

    JavaScript中Null与Undefined的区别解析

    JavaScript中Null与Undefined的区别解析主要涉及两种特殊数据类型:Null和Undefined。这两种类型是JavaScript中的原始类型,它们经常会使开发者混淆,尤其是在变量的赋值和比较操作中。本文将通过多个实例,详细解释...

    JS 中如何判断 undefined null.rar

    在JavaScript(JS)编程中,`undefined` 和 `null` 是两种不同的特殊值,它们各自表示不同的含义。理解和正确地判断这两个值对于编写健壮的JavaScript代码至关重要。在这篇文章中,我们将深入探讨如何在JavaScript中...

    javascript类型系统--undefined和null全面了解_.docx

    在 JavaScript 中,每个变量都有一个类型,当变量未初始化或引用的对象不存在时,就会出现 `undefined` 或 `null`。 `undefined` 主要表示变量已声明但未赋值的情况。例如: ```javascript var test; // undefined ...

    js中 关于undefined和null的区别介绍.docx

    在JavaScript编程语言中,`undefined`和`null`是两种不同的数据类型,它们虽然在某些情况下可能被视为等价,但有着本质的区别。了解这两者的差异对于编写健壮的JavaScript代码至关重要。 首先,`undefined`是一种...

    Javascript中判断一个值是否为undefined的方法详解

    一些人反对直接使用undefined变量进行比较,因为在旧的浏览器中允许它的值被重新赋值,比如下面这样: undefined = "test" 在被重新赋值后,使用undefined指令将不能正确的检测一个变量是否被赋值。 不过,这个行为...

    JavaScript中的null和undefined用法解析

    在JavaScript编程语言中,`null` 和 `undefined` 是两个重要的概念,它们都用来表示某种“不存在”或“没有”的状态,但它们之间存在着微妙的差异。了解这些差异对于编写健壮的JavaScript代码至关重要。 首先,`...

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

    == undefined 那么这两者到底有啥区别呢? null 这是一个对象,但是为空。因为是对象,所以 typeof null 返回 ‘object’ 。 null 是 JavaScript 保留关键字。 null 参与数值运算时其值会自动转换为 0 ,因此,下列...

    JavaScript undefined及null区别实例解析

    在JavaScript编程语言中,`undefined` 和 `null` 是两种特殊的值,它们在某些方面具有相似性,但也存在明显的差异。这两个概念对于理解和编写健壮的JavaScript代码至关重要,特别是对于那些处理变量状态和数据类型的...

    Javascript类型系统之undefined和null浅析

    本文将详细介绍javascript中的undefined和null 历史原因  1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。根据C语言的传统,null被设计成可以自动转为0  但是,JavaScript的设计者...

    JavaScript typeof, null, 和 undefined

    在JavaScript编程语言中,了解和正确使用数据类型是非常重要的,特别是`typeof`操作符、`null`和`undefined`这三个概念。它们在处理变量和数据时起着关键作用。 `typeof`操作符: `typeof`是JavaScript中的一个一元...

    辨析JavaScript中的Undefined类型与null类型

    在JavaScript编程语言中,Undefined和null是两个基本数据类型,虽然它们听起来很相似,但实际上它们有着明显的区别。Undefined类型表示一个变量已声明但未被初始化,而null类型则表示一个空对象指针。接下来,我将...

    JavaScript中猎取纯正的undefined的方法_.docx

    在JavaScript编程中,正确理解和获取`undefined`值是至关重要的,因为这直接影响到代码的健壮性和可维护性。在某些情况下,我们可能需要确保一个变量确实为`undefined`,而不是其他任何值,以进行有效的条件检查。...

    程序天下:JavaScript实例自学手册PDF

    JavaScript作为全球最广泛使用的脚本语言之一,它在网页开发、服务器端编程、移动应用、游戏开发等多个领域都有广泛应用。这本书通过丰富的实例,帮助读者深入理解JavaScript的核心概念和技术,从而能够独立进行Web...

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

    - `undefined` 和 `null` 在进行相等比较(`==`)时被认为是相等的,但它们与 `NaN` 不相等。 - `NaN` 与其他任何值,包括它自身,进行相等比较时都返回 false,这是因为 `NaN` 的特性决定了它不等于任何值,包括...

    JavaScript实战.pdf 中文完整版

    1. 变量与数据类型:了解JavaScript中的var、let和const声明变量的方式,以及五种基本数据类型(字符串、数字、布尔、null和undefined)和复杂数据类型(对象和数组)。 2. 运算符:学习各种运算符,包括算术、比较...

    JAVASCRIPT驱动开发小教程-BY KISSY TEAM

    在《JAVASCRIPT驱动开发小教程》中,KISSY团队详细介绍了如何利用JavaScript进行高效稳定的开发工作,特别是针对跨浏览器兼容性问题提出了有效的解决方案。本文将深入探讨教程中的关键知识点,包括测试策略、单元...

Global site tag (gtag.js) - Google Analytics