JavaScript中类型检测

JavaScript的变量是类型松散的,所谓松散类型也就是说变量可以用来保存任何类型的数据,在使用变量和函数参数之前,不会对它们进行比较已确保它们的数据类型正确。
JS有五种基本数据类型:Undefined、Null、Boolean、Number和String,还有一种复杂数据类型Object。
JS是不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一。

tips:由于JavaScript的变量没有预定类型,这使得变量能够作为数据类型参与运算,JS运算中基本数据类型转换规则为:
1.数字和字符串相加——将数值转为字符串
2.布尔值与字符串相加——将布尔值转为字符串
3.数字与布尔值相加——将布尔值转为数字。


对于上述6种类型的变量,可以利用typeof操作符来检测。
typeof操作符可能返回下列六个字符串:
"undefined"——这个值未定义,对应Undefined类型的变量
"undefined"——这个值是布尔值,对应Boolean类型的变量
"string"——这个值是字符串,对应String类型的变量
"number"——这个值是数值,对应Number类型的变量
"object"—— 这个值是对象或null,对应Object类型和Null的变量
"function"——这个值是函数。

在检测5种基本类型时,typeof操作符很有用,但是在检测引用类型的值时,这个操作符就用处不大了。因为任何引用类型用typeof检测都返回"object",但其实我们想知道的是它到底是什么类型的对象。
因此,我们检测引用类型时要用 instanceof操作符。
JS中的引用类型分为:Object类型、Array类型、Date类型、RegExp类型、Function类型、基本包装类型(Boolean、Number、String)、单体内置类型(Global对象、Math对象)
instanceof操作符返回true或false,其语法如下:
result = variable instanceof constructor。

instanceof操作符在编写类型检测代码时十分有用,例如:
function reverseSort(values){
    //只有values参数是Array类型时,才能调用其sort(),reverse()方法,如果不检测的话,传入一个非数组对象就报错了
    if(values instanceof Array){
    values.sort();
    values.reverse();
    }
}

总结:大体来说,5种基本类型的值应该使用typeof来检测,而对象(引用类型)的值则应该使用instanceof来检测。

补充一个2015-06-01面试宇宙中心某公司的一个题
function test(){
    alert("s");
}

alert (test instanceof Function);  //true
alert (test instanceof Object);  //true

当时一道选择题是判断test instanceof Object是true还是false。
可以把Object理解为所有实例的基础类,就像Java中的java.lang.Object对象一样。instanceof识别一个引用类型的实例时,其实是根据它的原型链来识别,在Function类型的原型链中,Object处在上游位置,Function类型的实例也是Object类型的实例。所以test instanceof Object依然是true。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值