Traceback(博客原文地址):[url=http://www.ajaxgo.org/press/?p=19]http://www.ajaxgo.org/press/?p=19[/url]
ECMAScript是JavaScript的核心部分,就如同其他语言的核心一样,ECMAScript描述了JavaScript的语法、类型、变量,语句,函数,运算符等。ECMAScript 和Java,C等在大部分语法现象上都很相似。同时,它是一种脚本语言,也有着和VBSript,Perl等共同的特性。下面,将简单谈一下js的类型。如没有任何编程基础的读者,请自行参阅各类书籍。
ECMAScript的共有两种类型,分别是原始值和引用值。原始值是指把值直接存储在变量里。另外一种是引用值,即把引用存储在变量里,这个引用再指向真正的对象。这个和Java、C++类似。C没有引用,只有指针。
原始类型
与原始值相对应的,ECMAScript共有5种原始类型,当变量赋值为这五种类型中的一种时,该变量存放的就是原始值。这五种原始值分别是 Undefined,Null,Boolean,Number, String。注意,ECMAScript并没有把数字类型再细分为整型,长整型,单精度型,双高精度型等。在这五种类型中,比较特殊的是 Undefined和Null。当变量已经定义,但未初始化时,其将被赋予值undefined。而Null则空对象,即对象是已经存在的,只是它的值为空。强烈建议,任何变量都必须初始化,即使当一开始还未确定赋何值时,String类型就赋值为空字符串,Boolean类型就赋值为false,数字类型就赋值为0,如果连变量类型都无法在定义时确定,那么就赋值为null。
对于这五种原始类型,ECMAScript提供一个运算符来直接检查这五种类型,它是typeof运算符。
程序代码:
var int=1;
var str=‘1′;
var bool=true;
var undef;
var anymous=null;
alert(typeof int);
alert(typeof str);
alert(typeof true);
alert(typeof undef);
alert(typeof anymous);
在上面的运算中,要注意的是,typeof null返回的是object。这个是早期JavaScript中的一个Bug。最后还是被ECMAScript沿用了。但是,在ECMAScript 3rd的规范文档中,已经把null表述成了对象,所以typeof返回object是正确的。
类型转换
ECMAScript提供两种简单转换,分别是转换成字符串和转换成数字。实际上ECMAScript的所有类型(包括对象)都内建了一个 toString()方法(原始类型其实是伪对象,下面会阐明),该方法就是把当前值按合适的方式转换成字符串。5个原始类型都将被转换成相同字面的字符串。而对于对象,又分为宿主对象和本地对象。本地对象本身已经实现了内在的toString()方法,而宿主对象可以由开发者自行创建toString方法。另外,在字符串连接操作中,所有对象或类型都会自动调用toString()对象。
程序代码:
alert(‘this is a number: ’+1+‘\nthis is a boolean: ’+ true +‘\nthis is a null: ’+ null + ‘\nthis is a undefined: ’+undefined);
当要转换成数字时,可以使用parseInt和parseFloat。这两个全局函数,会把字符串中第一个无效字符前的字符串转换成数字类型。当无法完成这样的转换时,函数将返回一个特殊值“NaN”。例如:
程序代码:
alert(parseInt(‘1234abcd’));
alert(parseInt(‘22.5′));
alert(parseInt(‘blue’));
另外,ECMAScript还提供三种强制类型转换。分别是Boolean(value),Number(value),String(value)。 String(value)等同与对值使用toString()方法,而Number()类似与 parseInt和parseFloat,不同的时,Number()需检查整个字符串是否能有效的转换成数字类型(在ECMASript可以把ture 看成1,把false看成0)。而Boolean()比较复杂。和toString()一样,任何类型和对象也都可以强制转换成Boolean型。规则如下(见示例):
程序代码:
/*Boolean类型,转换后不变*/
alert(‘true:’+Boolean(true));
alert(‘false:’+Boolean(false));
/*数字类型,0为false,非0为true*/
alert(‘0:’+Boolean(0));
alert(‘4:’+Boolean(4));
/*字符串类型,空串为false,其他为true*/
alert(‘"":’+Boolean(”));
alert(‘"abcd":’+Boolean(‘abcd’));
/*undefined和null,为false*/
alert(‘undefined:’+Boolean(undefined));
alert(‘null:’+Boolean(null));
/*所有引用类型,都为true*/
alert(‘Object:’+Boolean(new Object()));
引用类型
ECMAScript除了原始类型,还有引用类型。引用类型也通常叫做类。但ECMAScript实际上是没有类这个概念的。它仅仅只能称作对象。类的实例化用new关键字来创建。例如var o = new Object();ECMAScript中的类分别有:
- Object类是其他所有类的基类,Object类中的所有属性和方法都会出现在其他类中。对于Object类,会在对象一章中重点介绍。
- Boolean类,Number类,String类,RegExp类,Date类,Array类,Function类
程序代码:
//转换引用类型的误区
var oBoolean=new Boolean(false);
var oNumber=new Number(0);
alert(Boolean(oBoolean));
alert(Boolean(oNumber));
程序代码:
//伪对象的方法
var int=4;
var str=‘abcd’;
alert(int.toString(8)+‘ ’+(4).toString(16));
alert(typeof int);
alert(str.toUpperCase()+ ‘ ’+ ‘EFGH’.toLowerCase());
alert(typeof str);
程序代码:
var oObject={};
var oRegExp=/\d/ig;
var oArray=[];
var oFunction=function() {};
[[italic] 本帖最后由 渚薰 于 2007-12-10 08:51 编辑 [/italic]]





2007-12-7 17:18 

