javascript基础--数据类型,及检测数据类型方法

javascript数据类型: 

1.基本数据类型:

        number,string,undefined,boolean,null(表示一个空对象指针)

2.复杂数据类型

        object 包括:array,function,data...


数据类型检测方式:

1.typeof:只能检测基本数据类型

例:

var a = '1'

typeof a //string

javascript基础--数据类型,及检测数据类型方法

 不难发现null,array,{} typeof判断出的类型都为'object',所以typeof的无法区分数组和对象之间的类型。

2.instanceof:判断是否是对象的实例,构造函数prototype属性所指的对象是否在另一个检索对象的原型链上。

用法:

var obj = new String('123')

console.log(obj instanceof String)

instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型(最主要就是检索原型链)

child继承父类parent,child的原型链指向parent的实例。instanceof会检索child类的原型链。会找到child的父类parent。parent的父类Object.直到整个原型链检索完毕。所以会有以下输出结果。

javascript基础--数据类型,及检测数据类型方法

instanceof只检测对象类型  不能检测Number这种基本类型

3.Object.prototype.toString.call()

javascript基础--数据类型,及检测数据类型方法

javascript基础--数据类型,及检测数据类型方法

javascript基础--数据类型,及检测数据类型方法

 记住"[object Null]"都是字符串

//判读数组
function isArray(value){ 
return Object.prototype.toString.call(value) == "[object Array]"//true
}
isArray(a)

//判读Json
function isJson(value){ 
return Window.JSON && Object.prototype.toString.call(value) == "[object JSON]"//true

}

第三种方法是比较实用的。

在总结下:

typeof只能检测基本数据类型,区分不了array和对象。

instanceof 只能检测对象类型,不能检测Number这种非对象类型

Object.prototype.toString.call(value)是比较通用的检测数据类型方式,这中方式也可以检测JSON和正则