`
kuru
  • 浏览: 137081 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ECMAScript 基础

阅读更多
   
原文地址http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html作者: Flyingis

    JavaScript的核心之一ECMAScript的语言特性和Java、C、Perl都有许多相似之处,其中不少特性都是从这些语言借鉴而来,同时它们之间也存在许多差异。下面列举一些ECMAScript的基本特性。

    --和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中
    --ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如var n = 25,那么n就是数字类型,var n = "string" ,那么n就是String类型
    --在每一行代码后,可以不写分号,ECMAScript自动认为该行的末尾为该行代码的最后;ECMAScript中的变量可以不用初始化,在幕后系统将自动完成初始化操作
    --同一变量可以赋予不同类型的数据;变量的第一个字符只能是字母、下划线或$ ,其他的字符可以是下划线、$、或任意的字母、数字、字符
    --和其他语言一样,变量最好遵循驼峰书写法,或Pascal表示法、或匈牙利表示法
    --和大多数语言不同的是, ECMAScript 变量在使用之前可以不必声明,系统会自动将该变量声明为全局变量,例如var m = " Good " ; n = m + " Morning " ; alert(n)输出结构是 " Good Morning "
    --在大多数语言里,String是对象,在ECMAScript中却是原始数据类型

    原始数据类型
 
    ECMAScript原始数据类型有五种:Undefined、Null、Boolean、Number、String。

    typeof—判断变量和值的数据类型,通常有undefined、boolean、number、string、object五种类型。
    Undefined—当变量被声明但没有初始化,或函数没有明确返回一个值的时候,该变量或函数即为 Undefined 类型。
    Null—undefined是null的一种派生,当代表一个对象的值不存在时,该对象返回null。
    Boolean—包含两个值,true and false , false不等于0,但0可以转换为false 。
    Number—可以定义32位整型数据或64位浮点型数据。定义数字类型变量时,在数字前加0即为八进制,加0x为十六进制,它们计算后返回的结果统一为十进制。通过var f = 1.0可以定义一个浮点类型变量,有意思的是,当f被用于计算之前,它实际是以 String类型存储的。当浮点类型数据很大或很小时(可以前后移动六位),将使用E表示法来表示浮点数据,最大可以存储17位数据。另外,isFinite()方法可以判断一个数值是否有限,isNaN()方法可以判断一个数据是非数字类型。
    String—String在ECMAScript中是原始数据类型,并且是唯一没有空间大小限制的数据类型。和Java不同的是,var s = " javascript " 和var s = 'javascript'均是合法的表示方法。

    数据转换
 
    在不同数据类型之间转换是任何一门编程语言的一个重要特性,ECMAScript提供了一系列简单的方法来实现数据的转换,大多数数据类型都提供了简单的转换方法,对于复杂的转换则有一些全局方法来完成,不管是哪一种方法,ECMAScript中数据转换都非常简单。

    Boolean、number和string数据类型是原始数据类型,但它们同时是伪对象(在ECMAScript中伪对象到底该怎么解释,运行机制如何还不清楚?有人知道请给予解答),拥有自己的属性和方法,可以通过toString()方法来实现string类型的转换。ECMAScript定义所有的对象,不管是伪对象还是真实的对象,都可以实现toString()方法,string被列为伪对象的行列,自然也拥有toString()方法。将数字类型数据转换为string的时候,可以在 toString() 方法中加入2、8、16参数,来实现不同进制的数据输出,例如var n = 10; alert(n.toString(2))输出为1010,alert(n.toString(8))输出为12,n.toString()和n.toString(10)相同。
 
    ECMAScript提供了两种方法来实现string类型转化为数字类型的方法:parseInt()和parseFloat()。其他类型转换将会返回 NaN(Not a Number)。

    Type Casting

    ECMAScript数据类型的转换通常可以通过三个方法来实现:Boolean(value)、Number(value)和String(value),这样通常会产生一些非预期的结果。

    Boolean

var b1 = Boolean( "" );  // false–empty string
var b2 = Boolean( " hi " );  // true–non-empty string
var b3 = Boolean( 100 );  // true–non-zero number
var b4 = Boolean( null );  // false-null
var b5 = Boolean( 0 );  // false-zero
var b6 = Boolean( new Object());  // 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( new Object()) NaN
Number( 100 )  100
    String

    String()能实现所有类型数据的直接转换,和使用toString()不同的是,String()能够将null或undefined数据转换为string。

    引用类型

    ECMAScript 实际上并没有传统意义上的类,只是通过定义对象来等同于其他语言中的类,这一点我还比较含糊,以后可能会明白,在文中还是以“类”来说明。

var  ob  =   new  Object();
    以上定义了一个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类

    定义方法var ob = new Boolean(true); ob是Boolean原始数据类型的一个引用。在使用Boolean对象过程中,需要注意,所有的对象会自动转变为true,因此var ob1 = new Boolean(false);  var ob2 = ob1 && true; 最后ob2的值是true,非false。一般情况下,使用Boolean原始数据类型可以避免这种情况。

    Number类

    定义方法var o = new Number(15);
    获得原始数据的值var n = 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:

var  s  =   new  String( " Good Morning " );
alert(s.valueOf()  ==  s.toString());   // 输出true
alert(s.length);   // 输出12
alert(s.charAt( 1 ));   // 输出o
var  sr  =  s.concat( "  ! " ); alert(sr);   // 输出Good morning !
alert(s.indexOf( " o " );   // 输出1
alert(s.lastIndexOf( " o " );   // 输出6
alert(s.localeCompare(Good morning));   // 输出0
alert(s.localeCompare(Apple));   // 输出1
alert(s.localeCompare(House));   // 输出-1
alert(s.slice( 2 ));   //  输出od morning
alert(s.substring( 2 ));   //  输出od morning
alert(s.slice( 2 ,  - 5 ));   //  输出od mo
alert(s.substring( 2 ,  - 5 ));   // 输出Go
alert(s.toUpperCase());   // 输出GOOD MORNING
alert(s.toLowerCase());   // 输出good morning
    另外,所有String类的方法同样可以用于String原始数据类型,因为它是伪对象。

    instanceof

    instanceof操作符和typeof作用类似,不同的是,instanceof需要明确指定对象是否属于某种特定类型。例如

var  s  =   new  String( " Good morning ! " );
alert(s  instanceof  String);
    操作符和语句

    ECMAScript 中大多数操作符、语句和 Java 都比较类似,但也有一些其特有的,如 label 语句, with 语句, for-in 语句等等。

    Functions

    Functions是ECMAScript的核心,在任何时候任何地方都可以运行的一组代码语句。

  function  functionName(arg0, arg1, …… , argN)   {
  statements
}
    当function没有返回值或return语句后没有值的时候,该function实际上会被系统定义为undefined,当function返回值的时候,function可以不必明确指定为某种数据类型。

    关于重载

    重载是面向对象语言的基本特性之一,但 ECMAScript 的 functions 并不能重载,在同一范围里可以定义两个完全相同的函数,在调用函数的时候,最后的一个函数发挥作用。这种特性比较麻烦,但可以通过 arguments 对象来实现和重载类似的功能。

  function  func()   {
   if (arguments.length  ==   1 )   {
    alert(arguments[ 0 ]  +   5 );
  }   else   if  (arguments.length  ==   2 )   {
      alert(arguments[ 0 ]  +  arguments[ 1 ]);
    }
}

func( 5 );   // 输出10
func( 10 ,  15 );   // 输出25
    前面提到过,在同一范围里可以定义两个完全相同的function,在调用function的时候,最后的一个function发挥作用。

  function  func(i)   {
  alert(i  +   10 );
}
  function  func(i)   {
  alert(i  +   20 );
}
func( 5 );   // 输出25
    可以看出,是调用了最后的一个function使得数据结果为25,如果使用Function类来定义以上两个函数,那为什么会使用最后的一个function可能会更明确一些。

var  func  =   new  Function(“i”, “alert(i  +   10 )”);
var  func  =   new  Function(“i”, “alert(i  +   20 )”);
func( 5 );
    func指向了另外一个引用,从而值发生了改变,func是作为function对象的引用而存在的,并且允许两个变量指向同一个 function。

    和Function类相关的属性、方法有许多,例如length、toString()、valueOf()等等。其中toString()在调试程序中使用较多。
分享到:
评论

相关推荐

    ECMAscript

    ECMAscript基础

    ECMAScript 基础知识

    ECMAScript 基础知识

    《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础

    ECMAScript基础,主要包括语法,变量,关键字,保留字,原始值和引用值等

    Java Script高级程序设计

    第2章 ECMAScript基础 第3章 对象基础 第4章 继承 第5章 浏览器中的JavaScript 第6章 DOM基础 第7章 正则表达式 第8章 检测浏览器和操作系统 第9章 事件 第10章 高级DOM技术 第11章 表单和数据完整性 第12章 表格...

    [ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类lt;Objectgt;的扩展

    由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习。在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类...

    11前端大厂面试总结与补充说明.md

    集中梳理了 ECMAScript 基础、JS-Web-API、CSS 和 HTML、算法、浏览器和开发环境六大部分内容,并且就一些高频考题进行讲解。 ### 非技术面试部分 主要从软技能和项目介绍两个部分来梳理。在软技能方面,介绍了...

    ECMAscript 6.0

    ECMAscript 6.0PDF,先说清楚,这是一个需要对js 5.0和用过模块化框架的有一些基础的人,更容易理解

    【第九章】JavaScript【ECMAScript语法基础】

    【第九章】JavaScript【ECMAScript语法基础】

    ECMAScript6入门.zip

    《ECMAScript 6入门》是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性。 本书力争覆盖ES6与ES5的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。 本书为中级...

    深度解析 ECMAScript 6

    深度解析 ECMAScript 6 。本书为中级难度,适合已有一定 JavaScript 语言基础的读者,用来了解这门语言的最新发展;也可当作参考手。

    ECMAScript6入门

    《ECMAScript6入门》全面介绍了ECMAScript6新引入的语法特性,覆盖了..., 《ECMAScript6入门》为中级难度,适合已有一定JavaScript语言基础的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。

    ECMAScript功能:ECMAScript功能速查表

    ECMAScript功能或备忘单 ... 拉取请求受到高度赞赏。... ECMAScript是用作JavaScript基础的脚本语言。 ECMAScript由ECMA国际标准组织在ECMA-262和ECMA-402规范中标准化。 关于ECMAScript功能的每个建议都经历以下成熟阶段

    JavaScript高级教程

    第 2 章 ECMAScript 基础...............................................9 2.1 语法..............................................9 2.2 变量..............................................10 2.3 关键字........

    阮一峰ECMAScript6入门 高清完整.pdf版下载

    阮一峰ECMAScript6入门.pdf,本书力争覆盖ES6与ES5的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。 本书为中级难度,适合已有一定JavaScript语言基础的读者,用来了解这门语言的最新...

    ECMAscript 6 入门 第二版

    ECMAScript6入门》全面介绍了ECMAScript6新引入的语法特性,覆盖了...《ECMAScript6入门》为中级难度,适合已有一定JavaScript语言基础的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。

    ECMAScript-notes:ECMAScript中文笔记

    正值js红宝书第四版上市,出于兴趣我便从基础重新学习了这门语言,对于很多原理性的问题都不很了解,所以我觉得是有必要完整阅读一下ECMAScript文档的。对于大多数像我这样的初级javascript程序员(虽然我现在还不是...

Global site tag (gtag.js) - Google Analytics