一、JavaScript中的数据类型 = 基本数据类型 + 引用数据类型
JavaScript中有五种简单的数据类型(也称为基本数据类型),Undefined、Null、Boolean、Number、String。
Undefined和Null都是只有一个指的数据类型,值分别为undefined和null。在使用var声明变量但未对其加以初始化时,变量值就是undefined;而null值表示一个空对象指针。
Boolean类型只有两个字面值:true和false。在流控制语句中,非Boolean类型的值会自动调用Boolean()函数执行相应的Boolean转换。
Number类型可以表示整数和浮点数值。
String类型用于表示由零或多个16位Unicode字符组成的字符序列即字符串。
引用数据类型可以自定义,但ECMAScript中已经内置有几种常用的引用数据类型。
引用类型的这些标识其实都是构造函数,而构造函数属于函数的一种,本质又是继承Object的。
Object
Array
Date
RegExp
Function
Boolean、Number、String这三种基本的数据类型都对应有各自的基本包装类型。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。自动创建的基本包装类型,它们的生存期很短,只存在于一行代码的执行瞬间,然后就立即销毁了,不能对它们添加属性。
二、类型检测
①typeof:使用时语法格式可以typeof 空格 变量 也可以typeof(变量)
“undefined”-----如果这个值未定义
“boolean”-----如果这个值是布尔值
“string”-----变量是字符串
“number”-----变量是数值
“object”-----变量是对象(另外检测null时也返回这个,在IE和火狐中检测正则表达式也返回这个)
“function”-----变量是函数类型(另外,在IE和火狐之外的浏览器中检测正则表达式返回这个)
有三点需要注意,一个是null,一个是function,一个是正则表达式。使用typeof检测所有的引用类型(非函数类型)时,都返回“object”,检测null时也是;在检测引用类型中的函数类型时,则返回“function”;对于正则表达式来说,由于ECMA规范的原因该返回“function”的,因为它在内部实现了call方法,但是,在IE和firefox中,返回“object”。
②instanceof:使用时 实例 instanceof 类型构造函数
instanceof操作符的原理,我已经查过了,就是看实例的原型对象链中是否包含构造函数的prototype属性所指向的原型对象,是则返回true,否则返回false。
三、安全的类型检测
在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串。
如检测一个值是否为正则表达式:
function isRegExp(value){
return Object.prototype.toString.call() == "[object RegExp]";
}