js中的常用到的null/undefined/NaN介绍
一、null、undefined与NaN的概念
在js中,我一直觉得undefined和null的区别不大,平时用的时候也不会太在意。总体说来:
undefined一般表示根本”不存在“,null表示定义了,但是值是”空“。
但是大家发现,在 Java等编译型语言中,并不存在 undefined。这是为什么呢?Java 是一个静态类型语言,所有的变量在初始化时都进行了严格的类型声明,如果你定义一个undefined的变量,恐怕在编译的时候就被咔擦掉了,但是java中是允许定义null来表示空值的。而 JavaScript 是一门动态解释性语言,对于不存在的类型,只有在运行解释的时候才会作出判断。
什么情况下会是null?
//(1)给一个变量或者对象赋值的时候,赋值null,此处不宜赋值为undefined
var parm=null;
//(2)当元素获取不到时,dom返回的也是null
var dom = document.getElementById('domId');//null
//(3)另外原型链的终点,也是返回null的
Object.getPrototypeOf(Object.prototype)//null
什么情况下使用undefined呢?
主要有一下几种情况:
(1)声明变量,但未赋值
(2) 函数无返回值,执行后返回undefined
(3) 函数中可选参数,没有传参时返回undefined
(4)对象中不存在或未赋值的属性
var a;
console.log(a)//undefined
var foo=function(){
}
console.log(foo());//undefined
function getI(i){
console.log(i);
}
getI();//undefined
var o={};console.log(o.name);//undefined
下面看一下undefined和null转换为数值、typeof上面的表现
Number(undefined);//NaN
Number(null);//0
typeof(undefined)//"undefined"
typeof(null)//"object"
从上面可以看出,undefined转换为数值是NaN,而null可以转换为0,这是两者的区别;另外typeof检测之后,二者返回的分别是"undefined"、"object"
【注】typeof 返回的是字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined",这个后续可以为二者的检测来服务。
NaN
一般来说,当运算无法返回正确的数值时,其返回“NaN”值。NaN 值“不是数字”,所以在比较大小的时候,是无法处理的,更要注意的是 NaN 本身也不等于 NaN 。我们可以用JavaScript的内建函数isNaN()来检测一个值是否是数值
二、怎么判断undefined、null与数值
判断undefined
var parm=undefined;
if (typeof(parm) == "undefined"){
alert("i am undefined");
}
注意typeof是返回的字符串,需要把undefined也变成字符串比较
判断null
var parm = null;
if (!parm && typeof(parm )!="undefined" && parm !=0){
alert("i am null");
}
仅仅判断null,比较麻烦一些。首先将其转化为bool值判断,这里可能出现undefined、null与数值;然后利用typeof去筛选掉undefined;最后排除数值;
判断NaN
var parm= 0/0;
if(isNaN(parm)){
alert("i am NaN");
}
【注】isNaN() 函数可以用来检测一些运算过后可能出现的异常,比如0作除数等等,还有检测 parseFloat() 和 parseInt()处理以后的结果是否是数值,这样可以减少程序可能抛出的异常
同时判断undefined和null
var parm= undefined;
//var parm= null;
if (parm== undefined)
{
alert("i am null or undefined");
}
由于一般来说null==undefined返回的是true,所以我们可以用上述的方法去检测
同时判断undefined、null与数值
var parm= null;
//var parm= undefined;
//var parm= 0;
if (!parm)
{
alert("i am null or undefined or 0");
}
一般来说我们js判断中,不需要严格的检测时,直接!parm就可以了
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634333.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现