1.typeof 类型判断
利用typeof关键字我们能输出具体类型:
var o1=[]; var o2={}; var o3=123; var o4="123"; alert(typeof o1); alert(typeof o2); alert(typeof o3); alert(typeof o4);
我们知道js数据类型是不存在数组类型的,arr会显示出object类型。
我们知道为null或者是未被定义,会在if判断中转为false,那么o1和o2这种指定怎么处理的?
var o1=[]; var o2={}; var o3=123; var o4="123"; var o5; if(o1){alert(1)}else{}; if(o5){alert(1)}else{};
被未定义和指定类型定义值为空是两个概念,同样null类型就只有值null,和o1,o2这种无值定义也是不同的。
var o6=null; if(o6){}else{alert(2)};
结论:
1.typeof可以判断类型,无array类型一说
2.[],{}和null是不同的,null类型只有一个值就是null,{}虽然没有值但是属于object类型
3.if判断中null和未定义转为false的null只是指代类型为null,但是类型为null的只有一个null值,看结论2
2.instanceof 类型判断
同typeof类型,不过匹配到是true,不匹配就是false。
var o1=[]; var o2={}; var o3=123; var o4="123"; var o5=null; alert(o1 instanceof Object); alert(o2 instanceof Object); alert(o3 instanceof Object); alert(o4 instanceof Object); alert(o5 instanceof Object);
除了原生类型,其实我们对自定义类型同样可以使用这个判断方法。
function Per(arg){ this.name=arg; }; var p1=new Per("123"); alert(p1 instanceof Per);
结论:
1.与typeof类似返回真假值
2.除了原生类型还可以自定义类型的判断,typeof同理
3.in 判断集合键存在与否
集合有数组和对象类型,数组下标都是数字类型,对象类型就是字符串或者数字做下标了
var arr=[1,2,3,4,5]; var obj={a:123,b:456}; alert(0 in arr); alert(8 in arr); alert("a" in obj); alert("c" in obj);
返回值也是根据有无返回布尔类型对象。
window也是对象类型,用key我们可以调用下面的方法,比如定时器
alert("setInterval" in window); alert("aa" in window);
除了判断力能,还有循环处理,for in的结合
var obj={a:123,b:456}; for(var key in obj){ alert(obj[key]); };
结论:
1.in是键是否属于集合的判断
2.只要是object类型的都可用,window也是对象类型
3.in其实还可用在for in循环中
4.isNaN 是不是一个数的判断
这个方法如果传入参数不是数才会返回true。
var oo=123; var op="aaa"; alert(isNaN(oo)); alert(isNaN(op));
其实在数字类型中,会出现正无穷,负无穷还有分数字母为0的问题,这样这个方法就非常有用了
alert(isNaN(8/0));
结论:
1.数字类型中各种特殊值使用
5.==和=== 相等判断
看下面处理,利用==
var n=123; var nn="123"; if(n==nn){alert(1)}else{};
一个是数字类型一个是字符串,不过值都是123,利用==判断是成立的,利用===
var n=123; var nn="123"; if(n===nn){alert(1)}else{};
===要保证值和类型都一样才会成立
var n=123; var nn=123; if(n===nn){alert(1)}else{};
结论:
1.==值相同成立
2.===值和类型都相同成立