码迷,mamicode.com
首页 > Web开发 > 详细

js判断数据类型

时间:2015-07-31 19:57:50      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

又是好久没有写博客了,但一直都在坚持写笔记,笔记里的东西还是不拿出来献丑了,自己一个人看就好了,哈哈~

js中判断数据类型有很多种,今天我就整理一下我所知道的方法。

 

1.typeof

首先在控制台试试下面的几道小题

typeof null //object
typeof undefined // undefined
typeof false // boolean
typeof 123 // number
typeof ‘abc‘ //string

ok,五种基本数据类型,除了null,其他的输出不用解释。

null被认为是一个空对象引用,所以,会返回object,这算是一个语言实现的错误。

再来看下面的例子

typeof new Number(12); //object
typeof Number(13) //number
typeof NaN // number

此例子还可以用String和Boolean试一下,都是可以的。

解释一下:
    第一个虽然Number,String,Boolean是基本数据类型,但他们可以通过new创建,而通过new创建,后台会自动转化为对象,使他们看起来像对象。因此,第一个是返回object
    第二个由于没有用new,创建的就是基本数据类型,所以还是number类型
    第三个NaN是属于Number类型的,这里需要注意NaN与任何数据都不相等,包括它本身。

再试试用typeof判断引用类型

typeof {} //object
typeof /\d/ //object
typeof [] //object
typeof new Date() //object
typeof function() {} //function

可见使用typeof除了判断function是精确的,而其他引用型数据都是object,但需要注意的是在有些低版本浏览器,会将正则误判断为function。

因此,又有了instanceof判断引用类型。

 

2.instanceof

({}) instanceof Object;             //以下都为true
[] instanceof Array                   
(new Date()) instanceof Date    
(function() {}) instanceof Function    
(/\d/) instanceof RegExp           

恩,很好,完全可以是我们所想要的方法。顺便看看下面的例子:

new Number(12) instanceof Number // true
Number(13) instanceof Number // false
123 instanceof Number // false

嘿嘿。不对了吧,这就需要提到instanceof的原理了,instanceof其实是用来判断一个变量是否为某个对象的实例。

解释一下

    正如上面说所说,基本数据类型通过使用new创建时,会在后台转化为对象,使他们看起来像对象,

    第一个用new创建所以是Number的实例,返回true

    第二个只是用Number()创建数字,是基本类型,不是Number的实例

    第三个更不用说啦!

还有一种方法是使用constructor

 

3.constructor

constructor可以返回对象相应的构造函数

[].constructor == Array;               //以下都为true
{}.constructor == Object;
"string".constructor == String;
(123).constructor == Number;
true.constructor == Boolean;

但是,需要注意的是方法2和方法3必须是在当前页面声明,在一个页面中嵌入另一个页面,会影响判断结果。

那么,如何简单而又准确判断数据类型呢?下面方法是我常用的。

 

4.Object.prototype.toString.call() 

Object.prototype.toString.call() === ‘[object String]‘  //true  其他类型(包括基本类型)就不一一验证了

调用Obeject原型上的toString方法,该方法获取this对象上的[[Class]]属性,这个属性会返回该对象的类型。
用上面的方法可以较准确的判断数据类型,这也是我经常使用判断引用类型的方法

 

以下参考自http://www.cnblogs.com/mofish/p/3388427.html

5.使用特性判断

例如:

 

function isArray(obj) {
    return obj 
           && typeof obj === ‘object‘
           && typeof obj.length === ‘number‘
           && typeof obj.splice === ‘function‘
           && !(obj.propertyIsEnumerable(‘length‘));
}

 

有length和splice并不一定是数组,因为可以为对象添加属性,而不能枚举length属性,才是最重要的判断因子。

 

此外,如果是要判断数组,还可以使用ES5里的方法Array.isArray();

 

这些是我目前知道的,如果有更好的方法求赐教~~有什么不对的地方求指教~~

js判断数据类型

标签:

原文地址:http://www.cnblogs.com/nalixueblog/p/4692937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!