js中undefined,null,NaN的区别

来源:互联网 发布:战地2网络对战平台 编辑:程序博客网 时间:2024/05/01 19:39

1.类型分析:

js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。

var a1;//undefinedvar a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;//objectvar a7 = NaN;//numbervar a8 = undefined;//undefinedalert(typeof a);    //显示"undefined"alert(typeof a1); //显示"undefined"alert(typeof a2); //显示"boolean"alert(typeof a3); //显示"number"alert(typeof a4); //显示"string"alert(typeof a5); //显示"object"alert(typeof a6); //显示"object"alert(typeof a7); //显示"number"alert(typeof a8); //显示"undefined"

从上面的代码中可以看出:
(1)未定义的值和定义未赋值的为undefined,
(2)null是一种特殊的object,
(3)NaN是一种特殊的number。表示非数(Not a Number), NaN 不等于自己 。即 NaN == NaN 是 false 。判断NaN 使用 isNaN();

2.比较运算

var a1;         //undefinedvar a2 = null;  //objectvar a3 = NaN;   //numberalert(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与任何值都不相等,与自己也不相等。

3、JavaScript undefined 属性

定义和用法
undefined 属性用于存放 JavaScript 的 undefined 值。

语法
undefined

说明
无法使用 for/in 循环来枚举 undefined 属性,也不能用 delete 运算符来删除它。
undefined 不是常量,可以把它设置为其他值。
当尝试读取不存在的对象属性时也会返回 undefined。

提示和注释
提示:只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。undefined == null
注释:
null 表示无值,而 undefined 表示一个未声明的变量,
或已声明但没有赋值的变量,
或一个并不存在的对象属性。

实例
在本例中,我们将检测两个变量中未定义的一个:

<script type="text/javascript">    var t1=""    var t2    if (t1===undefined)         {document.write("t1 is undefined")}    if (t2===undefined)        {document.write("t2 is undefined")}</script>

输出:

t2 is undefined

undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。如下:

<script>  alert(t1===undefined);//t1变量未声明,这里为true  var t2;  alert(t2===undefined);//t2变量已声明但未赋值,这里为true  var t3={};  alert(t3.a===undefined);//t3这个对象没有属性a,为true</script>

判断undefined和null:

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

说明:null==undefined

判断NaN

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

说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。

提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

判断null:

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

判断undefined、null与NaN

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

判断undefined:

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

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

判断字符串是否为空

var strings = ''; if (string.length == 0) {     alert('不能为空'); }

javascript中=,==,===号的区别

= 赋值运算符
== 等于
=== 严格等于

例:

var a = 3;var b = "3";a==b //返回 truea===b //返回 false//因为a,b的类型不一样

“===”叫做严格运算符,”==”叫做相等运算符。

严格运算符
的运算规则如下,
(1)不同类型值如果两个值的类型不同,直接返回false。
(2)同一类的原始类型值同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。
(3)同一类的复合类型值两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
(4)undefined和null,undefined 和 null 与自身严格相等

null === null  //trueundefined === undefined  //true

相等运算符
1、在比较相同类型的数据时,与严格相等运算符完全一样。即:如果两个值具有相同类型,会进行===比较,返回===的比较值 。
2、在比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。
如果两个值不具有相同类型,也有可能返回true
如果一个值是null另一个值是undefined,返回true
如果一个值是string另个是number,会把string转换成number再进行比较
如果一个值是true,会把它转成1再比较,false会转成0
如果一个值是Object,另一个是number或者string,会把Object利用 valueOf()或者toString()转换成原始类型再进行比较

类型转换规则如下:
(1)原始类型的值原始类型的数据 会转换成 数值类型 再进行比较。字符串和布尔值都会转换成数值。
(2)对象与原始类型值比较对象(这里指广义的对象,包括数值和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。
(3)undefined和null,undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。
(4)相等运算符的缺点:相等运算符隐藏的类型转换,会带来一些违反直觉的结果。

'' == '0'           // false0 == ''             // true0 == '0'            // truefalse == 'false'    // falsefalse == '0'        // true//undefinednull与其他类型的值比较时,结果都为false//互相比较时结果为truefalse == undefined  // falsefalse == null       // falsenull == undefined   // true' \t\r\n ' == 0     // true

这就是为什么建议尽量不要使用相等运算符。至于使用相等运算符会不会对后续代码造成意外影响,答案是有可能会。

var a = undefined;if(!a){    console.log("1"); //1}var a = undefined;if(a == null){    console.log("1"); //1}var a = undefined;if(a === null){    console.log("1"); //无输出}

也就是说当a为undefined时,输出的值会有变化,而在编程中对象变成undefined实在是太常见了。

参考:

js判断undefined类型,undefined,null, 的区别详细解析

0 0
原创粉丝点击