Javascript基础 (一)类型javascript

来源:互联网 发布:电脑怎么更换网络节点 编辑:程序博客网 时间:2024/09/21 08:41

做了多年的程序员,虽然不是做前端,但却一直也在和javascript脚本打交道。我对javascript的看法可以用两个字来概括“灵活”,因其灵活,所以入手容易,真正的掌握理解却很难,因此使用中总是有许多的不确定。在使用中,我一直遇到种种的问题,有的解决了并理解了,有的就就直接借鉴(或者说copy)了许多其他的一些优秀的库的代码,但却因种种缘故,没有深入理解其设计思想、实现思路,自己也懒于梳理,所以,总是有些问题反复出现,然后又去反复寻找答案。这系列博客,主要是针对自己以往学习的一个整理。

javascript是一种弱类型脚本语言,弱类型并不代表没有类型。和其他的程序设计语言一样,javascript中的数据也是有类型的,大的可以分为简单类型与复杂类型。

如果按照typeof 函数的计算:

简单类型有 number,string,boolean

复杂类型有object和 function

下边的例子可以说明:

typeof 1 //echo "number"

typeof 1.1 //echo "number"

typeof "hello" //echo "string"

typeof true //echo "boolean"

typeof new object() // echo "object"

typeof new date() //echo "object"

typeof new array() //echo "object"

typeof new function() //echo "function"

typeof object //echo "function"

typeof date //echo "function"

typeof array //echo "function"

typeof function //echo "function"

上边的代码我们大致可以看出,使用typeof函数可以得出的javascript数据类型有哪些,复杂类型只有object和function,而简单类型也只有三种。其实这并不准确,不论复杂类型还是简单类型,使用typeof得出的都不完全,下边我们将详细点描述。

对于简单类型,”number”可以分为integer和float两种,这两种类型在计算乘除的时候,是不一样的,这句有点废话,其实我想说的是,float类型在和int类型计算的时候,会有许多莫名奇妙的问题,就是因为float的精度问题。而对于复杂类型,就相对复杂些,javascript内置的一些类型从上边的例子我们可以看到,常见的有date,object,array,function(应该还有其他的吧,写这个的时候我想不起来),虽然他们使用typeof 计算时,返回的只有object换个function两种,但是他们其实是不一样的,如何不一样,就无需赘述。但是由上边的例子我们也可以看出,object和function两种类型比较特殊,我将他们其称之为基础类型。有个简单的区分方法,通常由new创建的都是object类型,通过function关键自定义的都是function类型,但是还有例外,就是new function,它所创建的就是一个function,这个可能会在以后将函数的定义时提到吧。object类型,大致都能差不多理解,容易让人疑惑的是function类型,作为一种类型来描述时,其实应该描述为大写function。function本身的类型就是function,由function类型创建(包括使用function关键字定义)出来的function(函数)类型也是function。这句话需要仔细理解。但是,还有一点,定义的function也是可以实例化的(这个词用这儿可能不太合适,不过便于理解),如下所示:

function functiontype()

{

//echo i am a function

}

var func = new functiontype();

我们分别再使用typeof来检查functiontype和func的类型:

typeof functiontype // echo "function"

typeof func // echo "object"

再揣摩上边的话,定义的function的类型也是function,定义的function同样可以被用于实例化,就像系统内置的date,array等类型一样,这说明了自定义的function是可以被当做类型使用的,这就找到了一条自定义类型的路,在面向对象的语言中,我们称之为类。现在在javascript,我们也有定义类方法,即定义function。同时,类也是对象,类对象的类型是function。

以上可以看出,javascript中的复杂类型其实由date,array,object,function,以及我们自定义的类(型)。

既然存在类型,我们就需要区分类型,我们上边说了,typeof不能准确区分,因此,我们引入另一个关键字instanceof,并不是函数,但是它会返回一个boolean类型的值,标明一个对象是否为另一个对象的实例。如下

typeof new date() instanceof date //echo true

typeof new array() instanceof array //echo true

typeof new object() instanceof object //echo true

function mytype(){

// this is my type

}

var instance= new mytype();

instance instanceof mytype() //echo true

mytype instanceof function //echo true

new date() instanceof mytype() // echo false

我们可以看出,instanceof是用来检查一个对象是否为另一个对象的实例的。细心的朋友可能还会这样尝试:

function instanceof function //echo true

function instanceof object //echo true

object instanceof object //echo true

object instanceof function //true

老实说,这段代码很让人抓狂。我在前边也说过,object和function都为基础类型,我们前边也看到使用typeof时他们两个之间的关系,typeof object结果为function,我个人认为,这说明了javascript中所有复杂类型的基础的都是function,换句话说所有的类型都是基于function来实现的。另一方面任何对象使用instanceof object结果都为true,说明了任何对象都是object的实例。前边一句侧重于类型,后边侧重于实例(function我们也可以认为它是自己的一个实例)。

这只是类型于实例之间的简单示例,后边会讲到prototype,那是我们会发现类型与实例之间一些更有趣的关系,这些事javascript中实现面向对象的一个基础结构。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击