[董睿]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
(
typeof
str
==
'string'
||
str
instanceof
String
);
}
3. 类型转换
ecma262中描述了以下几种类型转换的操作:(还有其他的比如ToInt32等,这里就不列了)
ToNumber:转换成number型
ToString:转换成string型
相关文档:
第4章
函
数
JavaScript
中最好的特性就是它对函数的实现。它几乎无所不能。但是,想必你也能预料到,函数在
JavaScript
里也并非万能药。
函数包含一组语句,它们是
JavaScript
的基础模块单元,用于代码复用、信息隐藏和组合调用。函数用于指定对象的行为。一般来说,所谓编程就
是将一组需求分解成一 ......
第5章
继承
在那些基于类的语言(比如
Java
)中,继承(
inheritance
或
extends
)提供了两个有用的服务。首先,它是代码重用的一种形式。如果一个新的类与一个已存在的类大部分相
似,那么你只须具体说明其不同点即可。类继承的另一个好处是它包括了一套类型系统的规范。由于程序员无须编写显式类型转 ......
第7章
正则表达式
JavaScript
的许多特性都借
鉴自其他语言。语法借鉴自
Java
,函数借鉴自
Scheme
,原型继承借鉴自
Self
。而
JavaScript
的正则表达式特性则借鉴自
Perl
。
正则表达式起源于对形式语言的数
学研究。
在
JavaScript
中,正则表达式的语法是对
Perl
版的改进和发展,它非常 ......
http://blog.csdn.net/mouyong/archive/2009/11/21/4847303.aspx
第3章 对象
JavaScript的简单类型包括数字、字符串、布尔值(true和false)、null值和undefined值。其他所有的值都是对象。数字、字符串和布尔值“貌似”对象,因为它们拥有方法,但它们是不可变的。JavaScript中的对象是可变的键-值 ......