这里介绍一下三个比较容易混淆的知识点,写写博客加深一下自己的印象,欢迎大家指教:
1.“==” 和 “===” 的区别
2.“typeof” 和 “instanceof” 的区别
3.判断NAN
1.“==” 和 “===” 的区别
2.“typeof” 和 “instanceof” 的区别
3. 如何判断 “ undefined”, “null” ,“NAN”
一. “==” 和 “===” 的区别
1、对于 string,number 等基础类型,== 和 === 是有区别的
1)不同类型间比较,==之比较“转化成同一类型后的“值”,看“值”是否相等,如果”值“相等,则比较结果为true,否者为false;
=== 如果类型不同,其结果就是不等。
2)同类型比较,直接进行“值”比较,两者结果一样。
例如:
var number = 1;
var str = '1';
var temp = 1;
number == temp //true 相同类型 相同值
number === temp //true 相同类型 相同值
number == str //true 相同值
number === str //false 不同类型
2、对于Array,Object等高级类型,==和===是没有区别的
进行“指针地址”比较,相等即为true,否者为false。
3、基础类型与高级类型,==和===是有区别的
1)对于 ==,将高级转化为基础类型,进行“值”比较,如果“值”相等则为true,否者为false。
2)因为类型不同,=== 结果为false。
二.typeof 和 instanceof 常用来判断一个变量是什么类型,或者是否为空,但是两者还是有所区别的。
1.typeof 可以用来获取一个变量或者表达式的类型,一般只能返回几个结果:number,boolean,string ,function(函数),object(NULL,数组,对象),undefined。
console.log( typeof (1) ); //返回“number”
console.log( typeof ("1") ); //返回“string”
var temp = '111';
console.log( typeof (temp == '111') );//返回“boolean”
我们可以用 typeof 来判断一个变量是否存在,如:
if(typeof temp!="undefined")
不要用 if(temp) 去判断,因为当 temp 不存在(未声明)则会出错。
typeof 在判断 NULL,数组,对象时返回的都是 object,这也是它的局限性,这时我们可以用 instanceof 来帮助我们判断。
2.instanceof 用于判断一个变量是否某个对象的实例。
如下面例子:
var temp = new Array(); console.log( temp instanceof Array ); //返回 true
alert(temp instanceof Object); //返回 true;这是因为 Array 是 object 的子类。
function test(){};
var a = new test();
console.log(a instanceof test) //会返回true。
三. 如何判断“ undefined”,“null”,“NAN”
1 .判断 undefined
var temp = undefined;
if( typeof(temp) == "undefined" ) { } //返回true
2. 判断 null
var temp = null;
if( !temp && typeof(temp) != "undefined" && temp!= 0 ){}//返回true (避免报undefined 的错误)
3.判断NAN
var temp = 1;
if( isNaN(temp) ){} //返回false
undefined判断的是变量的类型,而null 和 NAN 两个判断是变量的值。
undefined可以用来表示以下的状况
1. 表示一个未声明的变量,
2. 已声明但没有赋值的变量,
3. 一个并不存在的对象属性.
null 是一种特殊的object ,表示无值.
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
使用 isNaN() 来判断一个值是否是数字。原因是 NaN 与所有值都不相等,包括它自己。