比较undefined、null和NaN的区别

本文深入解析JavaScript中的undefined、null及NaN三种特殊数据类型,探讨它们的特性、应用场景及如何通过typeof和isNaN()函数进行有效检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

undefined、null和NaN都属于javascript中的数据类型。

undefined

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

   var message;

alert(messag==undefined);// true

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

不过包含undefined值的变量与尚未定义的变量还是不一样的。

比如:

var message // 这个变量声明之后默认取得了undefined值

//下面这个变量并没有声明

//var age

alert(message)// undefined

alert(age) // 产生错误

但是有趣的是:

对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作夫同样也会返回undefined值,来看下面的列子:

var message;//这个变量声明之后取得了undefined值

//下面这个变量并没有声明

//var age

alert(typeof message);// undefined

alert(typeof age) ; // undefined

结果表明,对未初始化和未声明的变量执行typeof操作都返回了undefined值:这个结果有其逻辑上的合理性。

Null类型

Null雷响是第二个只有一个值的数据类型,这个值就是null,从逻辑角度来看,null值表示一个空对象指针,而这也是使用typeof操作符检测null值会返回object的原因。如下:

var car=null;

alert(typeof car) // object

如果定义的i按量准备在将来用于保存对象,那么最好将该变量初始化未null,而不是其他值。实际上,undefined值是派生null值的,因此ECMA-262规定对他们的想等新测试要返回true。

alert(null==undefined) //true

NaN

NaN,即非数字值,是一个特殊的数值,属于Number类型。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。在ECMAScript中,任何数值除以非数值类型都会返回NaN,同时不会影响其他代码的执行。NaN本省有两个非同寻常的特点,首先,任何设计NaN的操作都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括其本身。例如:

alert(NaN==NaN) ; // false

针对NaN的这两个特点,ECMAScript定义了isNaN()函数。这个函数接收了一个参数,该参数可以是任何类型,而函数会帮我们确定参数是否“不是数值”。isNaN()在接收到一个值后,会舱室将这个值转为数字。某些不是数值的值会直接转换为数值。而任何不能被转换为数值的值都会导致这个函数返回true。请看下面列子:

alert(isNaN(NaN)) ; //true

alert(isNaN(10)) ; //false(10是一个数值)

alert(isNaN(“10”)) ; //false(可以被转换为数值10)

alert(isNaN(“blue”)) ; //true(不能被转换为数值)

alert(isNaN(true)) ; //false(可以被转换为数值1)

其次:

isNaN也适用于对象,在基于对象调用isNaN函数是,会首先调用对象的valuof()方法,然后确定该方法返回的值是否可以转换为数值,如果不能,则基于这个返回值在调用toString()方法,再测试返回值。而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值