零、寒暄

  翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理还是出了问题,以后一定要好好的规划一下,不多说,来正题!

  自己为什么要写这篇文章呢?因为在吃完早饭,消化的时候,整了几行代码,然后发现整挂了。。。

  大致代码如下:

function getByClass(clsName, parent){
if(parent=="undefined"){
var oParent=document;
}else{
var oParent=document.getElementById(parent);
}
//后面代码略去
}

上面的方法在判断第二个可选参数的时候,如果没有传参,我要处理一下,然后程序在这里卡住了。最后换成undefined关键字就可以了,这里就要涉及到undefined和null的一些用法,具体不同的地方,请接着往下看。

一、null、undefined与NaN的概念

  1.在js中,我一直觉得undefined和null的区别不大,平时用的时候也不会太在意。总体说来:

  undefined一般表示根本”不存在“,null表示定义了,但是值是”空“。

  但是大家发现,在 Java等编译型语言中,并不存在 undefined。这是为什么呢?Java 是一个静态类型语言,所有的变量在初始化时都进行了严格的类型声明,如果你定义一个undefined的变量,恐怕在编译的时候就被咔擦掉了,但是java中是允许定义null来表示空值的。而 JavaScript 是一门动态解释性语言,对于不存在的类型,只有在运行解释的时候才会作出判断。

  2.什么情况下会是null?

//(1)给一个变量或者对象赋值的时候,赋值null,此处不宜赋值为undefined
var parm=null; //(2)当元素获取不到时,dom返回的也是null
var dom = document.getElementById('domId');//null //(3)另外原型链的终点,也是返回null的
Object.getPrototypeOf(Object.prototype)//null

  3.什么情况下使用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

  4.下面看一下undefined和null转换为数值、typeof上面的表现

Number(undefined);//NaN
Number(null);//
typeof(undefined)//"undefined"
typeof(null)//"object"

  从上面可以看出,undefined转换为数值是NaN,而null可以转换为0,这是两者的区别;另外typeof检测之后,二者返回的分别是"undefined"、"object"

  【注】typeof 返回的是字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined",这个后续可以为二者的检测来服务。

  5.NaN 

  一般来说,当运算无法返回正确的数值时,其返回“NaN”值。NaN 值“不是数字”,所以在比较大小的时候,是无法处理的,更要注意的是 NaN 本身也不等于 NaN 。我们可以用JavaScript的内建函数isNaN()来检测一个值是否是数值。

二、怎么判断undefined、null与数值

  1.判断undefined:

var parm=undefined;
if (typeof(parm) == "undefined"){
alert("i am undefined");
}

  注意typeof是返回的字符串,需要把undefined也变成字符串比较

  2.判断null:

var parm = null;
if (!parm && typeof(parm )!="undefined" && parm !=0){
alert("i am null");
}

  仅仅判断null,比较麻烦一些。首先将其转化为bool值判断,这里可能出现undefined、null与数值;然后利用typeof去筛选掉undefined;最后排除数值;

  3.判断NaN:

var parm= 0/0;
if(isNaN(parm)){
alert("i am NaN");
}

  【注】isNaN() 函数可以用来检测一些运算过后可能出现的异常,比如0作除数等等,还有检测 parseFloat() 和 parseInt()处理以后的结果是否是数值,这样可以减少程序可能抛出的异常

  4.同时判断undefined和null:

var parm= undefined;
//var parm= null;
if (parm== undefined)
{
alert("i am null or undefined");
}

  由于一般来说null==undefined返回的是true,所以我们可以用上述的方法去检测。

  5.同时判断undefined、null与数值:

var parm= null;
//var parm= undefined;
//var parm= 0;
if (!parm)
{
alert("i am null or undefined or 0");
}

  一般来说我们js判断中,不需要严格的检测时,直接!parm就可以了。

三、总结

  总体来说,这是一个细节问题,但是对细节把握的越清楚,在实际的code过程中就不易出错。我是一枚前端菜鸟,希望这篇文章能对大家有所启发,文中有理解错误的地方,希望大家指正。如果各位基友和软妹子觉得文章对您有所帮助,你的留言和推荐将对我是莫大的鼓舞!各位,午安!

此文章发布在本人博客园rookiebob,如需转载本文,请务必注明来源: http://www.cnblogs.com/rookiebob/,有些勘误我会及时更正,为了避免对您的误解,请访问原文!

聊一聊js中的null、undefined与NaN的更多相关文章

  1. 区分js中的null,undefined,"",0和false

    console.log(typeof null);//object console.log(typeof undefined);//undefined console.log(typeof " ...

  2. js中,null, '',undefined的区别

    在js中有三种值都可以代表false  "",null,undefined 那么他们之间到底有什么区别呢 首先我们先看这三种值得类型 ""代表了一个没有字符的字 ...

  3. JS 中如何判断 undefined 和 null

    JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的 ...

  4. JS 中判断空值 undefined 和 null

    1.JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正 ...

  5. 简写代码:当变量为false时['',false,null,undefined,0,NaN]时,返回默认值

    当变量为'',false,null,undefined,0,NaN时,返回默认值 var a='' a || 'hello world'   "hello world" var a ...

  6. JS中判断null、undefined与NaN的方法

    写了个 str ="s"++; 然后出现Nan,找了一会. 收集资料如下判断: 1.判断undefined: 代码如下: <span style="font-siz ...

  7. js中的null VS undefined

    var a;------>undefined. JS变量的默认值.注意点在于判断变量的值为null.这是错误的.比如 if( a === null ) { // TODO; }; 实际上是und ...

  8. js中的null和undefined

    大部分编程语言一般有一个表示“无”的值,而js中却有两个,null和undefined.所以查了一些资料,小结在此,以便查阅. js中的变量有两大类,基本的值类型,引用类型.其中值类型分为:Undef ...

  9. js中的null 和undefined

    参考链接:http://blog.csdn.net/qq_26676207/article/details/53100912 http://www.ruanyifeng.com/blog/2014/0 ...

随机推荐

  1. DOS下更改编码方式

    使用CHCP命令,CHCP是Change Code Page的缩写. 936 简体中文GBK 437 美国英语 65001 UTF编码 如:chcp 65001则将dos窗口中的字符编码改为UTF编码 ...

  2. 【转载】input 中 type='text' 的提交问题

    原文链接:http://www.nowamagic.net/html/html_AboutInputSummit.php 有时候我们希望回车键敲在文本框(input element)里来提交表单(fo ...

  3. MVC MVVM Knockout viewmodel 提交 完整过程,包含序列化 JSON 和 字典模型绑定

    //JSON 通用操作------------------------------------------------------------------------------using Syste ...

  4. flask学习

    安装环境: centos 6.3 python2.6 使用easy_install安装方式: [root@localhost ~]# easy_install flask 简单的hello from  ...

  5. Oracle DB 分区特性概述 Overview of Partitions

    概述:在Oracle数据库中,分区(partitioning)可以使非常大的表(table)或索引(index)分解为小的易管理的块(pieces),这些块被称作分区(partitions).每个分区 ...

  6. [Environment Build] Maven环境配置

    1. 下载并解压maven文件 2. 在环境变量中配置一个JAVA_HOME的变量,指向你本地的JDK 3. 在系统变量中新建一个名为:MAVEN_HOME的变量,指向你的maven解压文件的bin目 ...

  7. 编译原理之lex,yacc学习

    写在前面的几句废话 最近在项目的过程中接触了lex 和 yacc,他们可以帮助我们来实现自己的领域语言.最典型的应用就是可以帮助我们来实现自定义测试脚本的执行器.但是,这里也有一个限制,就是测试脚本要 ...

  8. 对 Linux 新手非常有用的20个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳. ...

  9. 修改linux端口范围 ip_local_port_range

    tags: ip_local_port_range 端口范围 sysctl Linux中有限定端口的使用范围,如果我要为我的程序预留某些端口,那么我需要控制这个端口范围, 本文主要描述如何去修改端口范 ...

  10. 安装Ubuntu 15.10后要做的事

    Ubuntu 15.10发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...