日期:2014-05-16  浏览次数:20339 次

javascript中的数据类型、Object与Function

1. 数据类型

javascript中包含6种数据类型:undefined、null、string、number、boolean和object。其中,前5 种是原始数据类型,object是对象类型。

object类型中包括Object、Function、String、Number、Boolean、Array、Regexp、Date、 Globel、Math、Error,以及宿主环境提供的object类型。

2. 类型判断

通常在javascript中进行类型判断主要通过3种方式:typeof、instanceof、constructor。

2.1 typeof

typeof操作可能返回的类型为undefined、object、number、string、function、boolean。但是会有一些情况并不能完全判断准确。比如typeof new String('')的值为object。

2.2 constructor

有时候我们可能会很偷懒的使用a.constructor == String进行类型判断,但是constructor其实是不靠谱的东西。因为当我们调用a.constructor的时候,内部操作其实是 ToObject(a).prototype.constructor(ToObject是什么,看下文分解)。

看下面一段代码就能明白:

String
.
prototype
.
constructor
 =
 Number
;
 
alert
(
'test'
.
constructor
 ==
 String
);
 //Result:false
 

或者

function
 MyClass
()
 {
 
}
 
MyClass
.
prototype
 =
 {};
 
alert
((
new
 MyClass
).
constructor
 ==
 MyClass
);
 //Result:false
 

而且,通过constructor并不能判断出对象实例类型的继承关系。因为javascript的继承其实是通过原型链实现的(原型链是什么,看下文分解)。

另外,null.constructor会抛出运行时的TypeError,所以使用constructor除了不靠谱外,还可能伴随着异常的风险。

2.3 instanceof

例子:a instanceof String

关于object类型的判断,使用instanceof判断是比较靠谱的方法。instanceof所做的事情是,先取出类型对象(String) 的prototype成员(String.prototype),然后和要判断类型的对象(a)的原型链中的对象逐个比较。当发现是一个对象的时候返回 true,原型链中当前节点是null的时候返回false。

类型判断示例:判断一个变量是否是字符串类型

function
 isString
(
str
)
 {
 
    return