头部背景图片
小畅的学习笔记 |
小畅的学习笔记 |

undefined、null与NaN

undefined、null和NaN都属于javascript中的数据类型,那么三者有什么区别呢,又要如何区分呢,今天我们来学一下undefined、null与NaN~

学习参考:
https://www.cnblogs.com/pangguoming/p/7690816.html
https://www.jianshu.com/p/9cc8411fa431

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

  • undefined的类型是一个对象,代表没有定义。
  • null的类型是个一对象,代表一个空值。
  • NaN的类型是一个number,代表不是数值类型。

1. undefined

当你使用一个未被声明的变量时或者已经声明了但还没有赋值,又或者使用了一个不存在的对象属性,返回的就是undefined。undefined对应类型undefined,布尔型false,字符串undefined,数字计算结果一定是NaN

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

常见的返回undefined类型的

  • 变量声明且没有赋值
  • 获取对象中不存在的属性
  • 函数需要实参,但是调用时没有传值,形参是undefined
  • 函数调用没有返回值或者return后没有数据,接受函数返回值的变量
    Image1.png
var test; 

//类型,输出undefined
document.write( typeof (test));
document.write("<br/>");

//字符串,输出undefinedtest
document.write(test + 'test');
document.write("<br/>");

//数字,输出NaN
document.write(test + 10);
document.write("<br/>");

//布尔值,输出false
if (test) {
document.write("true");
}
if (!test) {
    document.write("false");
}

判断undefined:

var tmp = undefined;
if (typeof(tmp) == "undefined"){
alert("undefined");
}

说明:typeof 返回的是字符串,有六种可能:”number”、”string”、”boolean”、”object”、”function”、”undefined”

2. null

把一个变量的值设置为null,就表示该变量的值不是有效的对象,数组,数字,字符串和布尔值。null对应类型Object,布尔值false,数字0,字符串“null”

var test = null;
//类型,输出object
document.write( typeof (test));
document.write("<br/>");

//字符串,输出nulltest
document.write(test + 'test');
document.write("<br/>");

//数字,输出10
document.write(test + 10);
document.write("<br/>");

//布尔值,输出false
if (test) {
document.write("true");
}
if (!test) {
document.write("false");
}

判断null:

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

3.NaN

NaN 属性代表一个“不是数字”的值。这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字(例如, “abc” / 4),要么是因为运算的结果非数字(例如,除数为零)。判断一个变量是否为NaN。ES6提供了一个新的 Number.isNaN() 函数,这是一个不同的函数,并且比老的全局 isNaN() 函数更可靠。

// 两大惊人特性
// 1 这的是Number型的
console.log(typeof NaN === "number");  // logs "true"

// 2 自己和自己并不相等
console.log(NaN === NaN);  // logs "false"

判断NaN:

var tmp = 0/0;
if(isNaN(tmp)){
alert("NaN");
}

说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。
提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

4.判断undefined和null

null和undefined的比较:

null == undefined  返回true
null === undefined  返回false

判断undefined和null:

var tmp = undefined;
if (tmp == undefined)
{
alert("null or undefined");
}



var tmp = undefined;
if (tmp == null)
{
alert("null or undefined");
}

说明:null==undefined

5. 判断undefined、null与NaN

undefined、null与NaN的比较:

var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;

alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"

从上面的代码可以得出结论:
(1)undefined与null是相等;
(2)NaN与任何值都不相等,与自己也不相等。

判断undefined、null与NaN:

var tmp = null;
if (!tmp)
{
alert("null or undefined or NaN");
}
Lililich's Blog