时间:2021-05-28
JavaScript的核心之一ECMAScript的语言特性和Java、C、Perl都有许多相似之处,其中不少特性都是从这些语言借鉴而来,同时它们之间也存在许多差异。下面列举一些ECMAScript的基本特性。
--和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中
--ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如varn=25,那么n就是数字类型,varn="string",那么n就是String类型
--在每一行代码后,可以不写分号,ECMAScript自动认为该行的末尾为该行代码的最后;ECMAScript中的变量可以不用初始化,在幕后系统将自动完成初始化操作
--同一变量可以赋予不同类型的数据;变量的第一个字符只能是字母、下划线或$,其他的字符可以是下划线、$、或任意的字母、数字、字符
--和其他语言一样,变量最好遵循驼峰书写法,或Pascal表示法、或匈牙利表示法
--和大多数语言不同的是,ECMAScript变量在使用之前可以不必声明,系统会自动将该变量声明为全局变量,例如varm="Good";n=m+"Morning";alert(n)输出结构是"GoodMorning"
--在大多数语言里,String是对象,在ECMAScript中却是原始数据类型
原始数据类型
ECMAScript原始数据类型有五种:Undefined、Null、Boolean、Number、String。
typeof—判断变量和值的数据类型,通常有undefined、boolean、number、string、object五种类型。
Undefined—当变量被声明但没有初始化,或函数没有明确返回一个值的时候,该变量或函数即为Undefined类型。
Null—undefined是null的一种派生,当代表一个对象的值不存在时,该对象返回null。
Boolean—包含两个值,trueandfalse,false不等于0,但0可以转换为false。
Number—可以定义32位整型数据或64位浮点型数据。定义数字类型变量时,在数字前加0即为八进制,加0x为十六进制,它们计算后返回的结果统一为十进制。通过varf=1.0可以定义一个浮点类型变量,有意思的是,当f被用于计算之前,它实际是以String类型存储的。当浮点类型数据很大或很小时(可以前后移动六位),将使用E表示法来表示浮点数据,最大可以存储17位数据。另外,isFinite()方法可以判断一个数值是否有限,isNaN()方法可以判断一个数据是非数字类型。
String—String在ECMAScript中是原始数据类型,并且是唯一没有空间大小限制的数据类型。和Java不同的是,vars="javascript"和vars='javascript'均是合法的表示方法。
数据转换
在不同数据类型之间转换是任何一门编程语言的一个重要特性,ECMAScript提供了一系列简单的方法来实现数据的转换,大多数数据类型都提供了简单的转换方法,对于复杂的转换则有一些全局方法来完成,不管是哪一种方法,ECMAScript中数据转换都非常简单。
Boolean、number和string数据类型是原始数据类型,但它们同时是伪对象(在ECMAScript中伪对象到底该怎么解释,运行机制如何还不清楚?有人知道请给予解答),拥有自己的属性和方法,可以通过toString()方法来实现string类型的转换。ECMAScript定义所有的对象,不管是伪对象还是真实的对象,都可以实现toString()方法,string被列为伪对象的行列,自然也拥有toString()方法。将数字类型数据转换为string的时候,可以在toString()方法中加入2、8、16参数,来实现不同进制的数据输出,例如varn=10;alert(n.toString(2))输出为1010,alert(n.toString(8))输出为12,n.toString()和n.toString(10)相同。
ECMAScript提供了两种方法来实现string类型转化为数字类型的方法:parseInt()和parseFloat()。其他类型转换将会返回NaN(NotaNumber)。
TypeCasting
ECMAScript数据类型的转换通常可以通过三个方法来实现:Boolean(value)、Number(value)和String(value),这样通常会产生一些非预期的结果。
Boolean
varb1=Boolean("");//false–emptystring
varb2=Boolean("hi");//true–non-emptystring
varb3=Boolean(100);//true–non-zeronumber
varb4=Boolean(null);//false-null
varb5=Boolean(0);//false-zero
varb6=Boolean(newObject());//true–object
Number
Number(false)0
Number(true)1
Number(undefined)NaN
Number(null)0
Number("5.5")5.5
Number("56")56
Number("5.6.7")NaN
Number(newObject())NaN
Number(100)100
String
String()能实现所有类型数据的直接转换,和使用toString()不同的是,String()能够将null或undefined数据转换为string。
引用类型
ECMAScript实际上并没有传统意义上的类,只是通过定义对象来等同于其他语言中的类,这一点我还比较含糊,以后可能会明白,在文中还是以“类”来说明。
varob=newObject();
以上定义了一个Object对象的实例,这种语法和Java比较类似。当有参数的时候需要括号来引用,当不存在参数时,括号可以去掉。由于ECMAScript语言比较松散,不管是前面所属的基础语法,还是后面将提到的语法知识,我们都应该尽量按照一定的书写规范来约定自己的代码格式,而不应充分发挥语言松散的特点。
Object类
Object类和Java里的java.lang.Object类比较相似,它是ECMAScript中其他所有类的基类,它具有如下属性:
constructor—建立对象的函数的一个引用,对于Object类而言,该引用指向本地Object()方法。
prototype—对象里prototype对象的一个引用值。
Object类拥有的方法:
hasOwnProperty(property)—判断property属性是否存在于对象中,property数据类型为string
isPrototypeOf(object)—判断一个对象是否是另一对象的prototype
propertyIsEnumerable(property)—判断所给出的属性能否使用for语句列举出来
toString()—返回对象的原始类型string
valueOf()—返回对象合适的原始值,对于多数类而言,返回的值和toString()相同
Object类的每一个属性和方法都被其他的类所重写
Boolean类
定义方法varob=newBoolean(true);ob是Boolean原始数据类型的一个引用。在使用Boolean对象过程中,需要注意,所有的对象会自动转变为true,因此varob1=newBoolean(false);varob2=ob1&&true;最后ob2的值是true,非false。一般情况下,使用Boolean原始数据类型可以避免这种情况。
Number类
定义方法varo=newNumber(15);
获得原始数据的值varn=o.valueOf();
Number类有一些为数字类型的值特别设计的方法:
alert(o.toFixed(2));//输出15.00
alert(o.toExponential(1));//输出1.5e+1
在无法确定使用toFixed还是toExponential的时候,可以使用toPrecision方法来获得取值:
alert(o.toPrecision(1));//输出2e+1
alert(o.toPrecision(2));//输出15
alert(o.toPrecision(3));//输出15.0
String类
String类是一种复杂引用类型,这里仅列出一些常见的方法,其中不少都是模仿java.lang.String:
vars=newString("GoodMorning");
alert(s.valueOf()==s.toString());//输出true
alert(s.length);//输出12
alert(s.charAt(1));//输出o
varsr=s.concat("!");alert(sr);//输出Goodmorning!
alert(s.indexOf("o");//输出1
alert(s.lastIndexOf("o");//输出6
alert(s.localeCompare(Goodmorning));//输出0
alert(s.localeCompare(Apple));//输出1
alert(s.localeCompare(House));//输出-1
alert(s.slice(2));//输出odmorning
alert(s.substring(2));//输出odmorning
alert(s.slice(2,-5));//输出odmo
alert(s.substring(2,-5));//输出Go
alert(s.toUpperCase());//输出GOODMORNING
alert(s.toLowerCase());//输出goodmorning
另外,所有String类的方法同样可以用于String原始数据类型,因为它是伪对象。
instanceof
instanceof操作符和typeof作用类似,不同的是,instanceof需要明确指定对象是否属于某种特定类型。例如
vars=newString("Goodmorning!");
alert(sinstanceofString);
操作符和语句
ECMAScript中大多数操作符、语句和Java都比较类似,但也有一些其特有的,如label语句,with语句,for-in语句等等。
Functions
Functions是ECMAScript的核心,在任何时候任何地方都可以运行的一组代码语句。
functionfunctionName(arg0,arg1,……,argN){
statements
}
当function没有返回值或return语句后没有值的时候,该function实际上会被系统定义为undefined,当function返回值的时候,function可以不必明确指定为某种数据类型。
关于重载
重载是面向对象语言的基本特性之一,但ECMAScript的functions并不能重载,在同一范围里可以定义两个完全相同的函数,在调用函数的时候,最后的一个函数发挥作用。这种特性比较麻烦,但可以通过arguments对象来实现和重载类似的功能。
functionfunc(){
if(arguments.length==1){
alert(arguments[0]+5);
}elseif(arguments.length==2){
alert(arguments[0]+arguments[1]);
}
}
func(5);//输出10
func(10,15);//输出25
前面提到过,在同一范围里可以定义两个完全相同的function,在调用function的时候,最后的一个function发挥作用。
functionfunc(i){
alert(i+10);
}
functionfunc(i){
alert(i+20);
}
func(5);//输出25
可以看出,是调用了最后的一个function使得数据结果为25,如果使用Function类来定义以上两个函数,那为什么会使用最后的一个function可能会更明确一些。
varfunc=newFunction(“i”,“alert(i+10)”);
varfunc=newFunction(“i”,“alert(i+20)”);
func(5);
func指向了另外一个引用,从而值发生了改变,func是作为function对象的引用而存在的,并且允许两个变量指向同一个function。
和Function类相关的属性、方法有许多,例如length、toString()、valueOf()等等。其中toString()在调试程序中使用较多。
原文:http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
越来越多的人在学习SEO,学习SEO需要了解的基础知识?学习seo首先要了解seo基础知识,先打好基础,掌握好seo基础知识,优化道路才会走得顺畅和稳固。那么新
一个合格的外贸人员,不光是对专业技能要求高,还要求个人具有很强的综合能力!做为一个合格的外贸人员,首先,基础知识一定要过硬,这里的基础知识指国际贸易基础知识,比
基础知识:HTMLJavaScript就这么回事1:基础知识1创建脚本块1:2:JavaScriptcodegoeshere3:2隐藏脚本代码1:2:5:在不支
如何从无开头学习PHP呢。一、学习PHP最好要具备的基础知识:1)HTML2)CSS3)JavaScript特别是HTML,是必备的基础知识,同时还需了解/Le
考试范围科目1:电子商务系统基础知识1.电子商务基础知识1.1电子商务及其发展1.2电子商务模式1.3电子商务的社会环境1.4物流知识1.5网络营销知识1.6电