您的位置:首页 > Web前端 > JavaScript

js中undefined,null,NaN的区别

2017-02-24 12:35 405 查看

1.类型分析:

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

var a1;//undefined
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;//object
var a7 = NaN;//number
var a8 = undefined;//undefined

alert(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;         //undefined
var a2 = null;  //object
var a3 = NaN;   //number

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与任何值都不相等,与自己也不相等。

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 //返回 true
a===b //返回 false
//因为a,b的类型不一样


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

严格运算符

的运算规则如下,

(1)不同类型值如果两个值的类型不同,直接返回false。

(2)同一类的原始类型值同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。

(3)同一类的复合类型值两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。

(4)undefined和null,undefined 和 null 与自身严格相等

null === null  //true
undefined === 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'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

//undefined和null与其他类型的值比较时,结果都为false
//互相比较时结果为true
false == undefined  // false
false == null       // false
null == 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, 的区别详细解析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: