JS中的typeof

js中的typeof用来检查一个变量的数据类型,它返回的是一个字符串。不同类型变量经typeof运算符后返回的值如下:

  • undefined:“undefined”
  • null:“object”
  • string:“string”
  • number:“number”
  • boolean:“Boolean”
  • function:“function”
  • object:“object”

需要注意的是null返回的是object。下面再来说一说null和undefined的区别:

  • null:表示一个尚不存在的对象,表示一个对象的占位符,意思是这里将来会是一个对象,而现在该对象还没有创建。
  • undefined:表示一个还未定义(声明)或者定义了还没有初始化的变量(对象)。

这里要注意,如果一个变量尚未声明,使用if语句检测该变量会报错,而使用typeof将会返回undefined。undefined和null的布尔值都是false。因此,未声明的变量应该用typeof来检测,而不是直接使用if语句。
另外,undefined是从null派生出来的,因此undefined==null返回true。一个没有返回值的function实际上返回的是undefined。

jQuery中推荐了用以下方式来检测一个变量是否定义(声明)了:

  • Global Variables: typeof variable === “undefined”
  • Local Variables: variable === undefined
  • Properties: object.prop === undefined

但是:For undeclared variables, typeof foo will return the string literal “undefined”, whereas the identity check foo === undefined would trigger the error “foo is not defined”. 因此最好使用typeof来检测。

typeof还有一个常见的用法就是检查某个变量是否存在,例如浏览器支不支持某个对象。举个例子,在《JavaScript高级程序设计》中有一段跨浏览器生成XMLHttpRequest对象的代码。

function createXHR(){
    if(typeof XMLHttpRequest !="undefined"){ 
        return new XMLHttpRequest();
    }else if(typeof ActiveXObject !="undefined"){ //for IE5,6
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

这里的XMLHttpRequest和ActiveXObject都是window下的全局变量,是一个构造函数(typeof检测返回function),如果浏览器支持的话,即该变量存在,直接使用if(window.XMLHttpRequest)可返回true,但是如果浏览器不支持,直接使用if检测一个未定义的变量就会抛出 ReferenceError,而使用typeof则会返回undefined,不会报错。

这里做一个补充,对于通过var声明的变量使用if语句检测会报错,而对于某个对象不存在的属性进行检测是不会报错的,其实,不存在的属性值为undefined。放在if语句中就是false值。像这样检测一个对象的属性是否存在可以直接放到if语句中而不使用typeof。
参考资料:js中undefined,null和typeof运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值