ECMAScript基础

 开始读《JAVASCRIPT高级程序设计》
第2章 ECMAScript基础

JavaScript实质上是ECMAScript在web环境中的实现,还有其他实现(如Flash的ActionScript等)。因此了解基本的ECMAScript相当于掌握javascript的基础。

1。ECMAScript的基础概念:
1)区分大小写
2)变量是弱类型(解释型语言的基本特点)
3)每行结尾的分号可有可无(与java不同)
4)注释的形式与java相同(单行或者块注释)
5)大括号代表代码块{}

2。变量,使用var定义。如var test="test1"
当然,变量是弱类型,并且可以不被初始化而定义
var test="test1"
var test2;
test=1;
建议采用匈牙利类型标记法来命名变量。

3.关键字和保留字(略)

4。原始值和引用值
与java类似,变量分成原始类型与引用类型两类:
1)原始值存储在stack中
2)引用值是存储在heap中的对象,存储在变量处的是一个point

5。原始类型:
1)ECMAScript有5种原始类型:Undefined、Null、Boolean、Number和String。可以使用typeof来判断一个值是否在某类型的范围内。如:

var s="test";
alert(typeof s)  //输出"string"

注意:type null返回object,因为null被认为是对象的占位符。

2)Undefined类型
当变量未初始化时,该变量的默认值就是undefined。但是,undefined并不同于未定义的值。但是,typeof并不区分两者,比如:

var temp1;
alert(typeof temp1);  //未初始化,输出undefined
alert(typeof temp2);   //未定义,也是undefined

函数无返回值,返回的也是undefined

3)Null类型
Null只有一个值,也就是null。Undefined本质上是从Null派生来的,因此两者相等:
alert(null==undefined);  //输出true
但两者意义不同,Undefined表示变量未被初始化之前的值,而Null则表示尚未存在的对象,也就是对象的占位符。

4)Boolean类型
Boolean有两个值:true,false

5)Number类型
Number类型很有趣,Number可以表示32位的数字,也可以表示64位的浮点数,以0开头的数字当成八进制,以ox开头即为十六进制。有趣的地方在于所有数字运算结果都是返回十进制!
在ECMAScript中,浮点数的计算本质上是存储的是字符串。
Number类型的大小在Number.MAX_VALUE和Number.MIN_VALUE之间
无穷大用Infinity表示,如你所见,Number.MAX_VALUE就是Infinity,而Number.MIN_VALUE就是-Infinity,可以通过isFinite(n)来判断n是否超过界限

最后,还有一个特殊值是NaN,表示Not a Number(非数),非数产生在类型转换失败时,注意,它与自身不相当:alert(NaN==NaN);  //输出false

不推荐使用NaN,我们可以通过isNaN()来判断是否是非数(很常用咯)

6) String类型
String是唯一没有固定大小的原始类型,可以存储0或者多个Unicode字符。与java不同的是,可以使用双引好和单引号来声明字符:
var s1="test1";
var s2='test2';
常见转义符与其他语言相同。

6。类型转换
1)转换成字符串:
Boolean,String和Number类型本质上都是伪对象,他们都有toString()方法(与java相同)

Number类型的toString()有两种模式:
toString(),返回数字的十进制
toString(n),返回n进制的字符串(n为2,8,10,16)

2)转换成数字:
两个方法:parseInt()和parseFloat()方法。用法略过,需要注意的是parseInt如果没指定基数,会把以0开始的解析为8进制。parseFloat反而不会。

3)强制类型转换:
3种强制类型转换:
String(value);
Boolean(value);
Number(value);
规则如下:
(1)String(value)与toString()基本一样,除了对null或者undefined的转换之外,如:
var s1=String(null); //通过
var oNull=null;
var s2=oNull.toString(); //报错

(2)Boolean(value),如果该value是空字符串、数字0、undefined或者null,返回false,其他返回true

(3)Number()与parseInt和parseFloat基本相同,不同的是Number()将转换整体,如果转换失败返回NaN。如:

Number(false)  ;//  0
Number(true);  //   1
Number(new Object());   //  NaN
Number('5.6.7');    //  NaN

7。引用类型:
1)Object类:类似于java中java.lang.Object的地位和作用,js中所有类都继承此类而来。它包含下面的属性:
(1)Constructor——对创建该对象函数的引用
(2)Prototype——对该对象对象原型的引用,对所有的类,它将返回一个Object实例
(3)HasOwnProperty(property)——判断是否有某个属性
(4)IsPropertOf(object)——判断该对象是否为另一个对象的原型
(5)PropertyIsEnumerable(property)——判断对象的属性是否可以枚举
(6)ToString()——返回对象的原始字符串表示
(7)ValueOf()——返回最适合该对象的原始值,对于许多类,它的结果与ToString()相同

2)Boolean类,尽量避免使用,注意的是,在Boolean表达式中,所有的值将被自动转化为true,所以下面的输出:
var oFalseObject=new Boolean(false);
alert(oFalseObject&&true);  //输出true,而不是false

3) Number类,是Number原始类型的引用类型,应该少使用此类,尽量使用原始类型。需要注意3个方法:
(1)toFixed():返回具有指定位数小数的字符串,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toFixed(2));  // 输出99.00

 (2) toExponential(),返回用科学记数法表示的数字的字符串形式,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toExponential(1));  //输出9.9e+1

(3)toPrecision(),对数进行舍入,返回尽可能接近真实值的数字,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toPrecision(3));  //输出99.0
注意,这3个方法都将进行四舍五入操作

4)String类,是String原始类型的对象,常见方法见下面的例子:

var oStringObject=new String("hello world");
alert(oStringObject.length);  //输出11
alert(oStringObject.toString()==oStringObject.valueOf());  //输出true
alert(oStringObject.charAt(1));   //输出e
alert(oStringObject.charCodeAt(1)); //输出e的字符代码:101
alert(oStringObject.concat(",china"));   //输出hello world,china
alert(oStringObject.indexOf("e"));   //输出1
alert(oStringObject.lastIndexOf("o"));  //输出7

var oStringObject1=new String("yellow");
var oStringObject2=new String("brick");
var iResult=oStringObject1.localeCompare(oStringObject2);  //根据本地比较
if(iResult>0){
  alert("oStringObject1在oStringObject2后面");
}else if(iResult<0){
   alert("oStringObject1在oStringObject2前面");
}else
   alert("oStringObject1和oStringObject2相同");
alert(oStringObject.substring(3,7));  //输出"lo w"
alert(oStringObject.slice(3,7));  //输出"lo w"
alert(oStringObject.toUpperCase());
alert(oStringObject.toLowerCase());
alert("中国".toLocaleLowerCase());

8.操作符和语句,省略大部分操作符的介绍和控制语句,与其他语言(java,ruby)基本相同,需要注意的摘抄如下:
1)delete操作符:用于删除对以前定义的对象属性或者方法的引用,如:

var o=new Object();
o.name="dennis";
alert(o.name); //输出dennis
delete o.name;   //解除引用
alert(o.name);  //输出undifined

2)for ... in语句,严格的枚举语句,用于枚举对象属性

3)switch可以作用于字符串,而不仅仅是整数

4)不支持重载(与ruby相同),可以通过arguments对象来变相实现

5)在ECMAScript中,函数其实是完整一个对象(与ruby相同,或者说动态语言的基本特点),可以采用:
var function_name=new Function(arg1,arg2,arg3,...,function_body);
来定义函数(速度比普通方法慢)。函数可以作为参数传递,函数的length属性返回此函数的参数个数
6)ECMAScript的闭包概念与其他动态语言的概念很不同,我还不大理解,过段时间好好研究一下。(写入备忘录)

文章转自庄周梦蝶  ,原文发布时间5.17

时间: 2024-12-01 16:09:25

ECMAScript基础的相关文章

ECMAScript 基础知识_javascript技巧

JavaScript的核心之一ECMAScript的语言特性和Java.C.Perl都有许多相似之处,其中不少特性都是从这些语言借鉴而来,同时它们之间也存在许多差异.下面列举一些ECMAScript的基本特性.    --和Java一样,ECMAScript区分大小写,注释的格式相同,通过{}确定代码块,原始数据类型存储在堆栈,对象的引用存储在堆中    --ECMAScript是一种松散的语言,ECMAScript通过var操作符声明变量,并且不限类型,例如var n = 25,那么n就是数字

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

2.1 语法 区分大小写.变量弱类型.行尾分号可有可无.注释为双斜线.括号表明代码块 2.2 变量 变量用var声明,变量的命名规则:第一个字符必须是字母.下划线或美元符号:余下的字符可以是下划线.美元符号或任何字母或数字字符. 变量命名规范: Camel标记法:首字母小写,接下来的单词都以大写字母开头.例如:var myTestValue=0,mySecondTestValue="hi"; Pascal标记法:首字母大写,接下来的单词都以大写字母开头.例如:var MyTestVal

Web前端和后端之区分,以及…

原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发. 2)后端开发人员:会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等. 现在来看,我们对前后端的要求还是蛮低的,尤其是后端,新员工经过培训之后都是可以参与到后端开发的,没有太高的技术门槛,唯一需要做的就

使用ruby备份你的blog

虽然sohu不大可能倒闭,但是我也想导出我所有的文章,备份在自己的数据库中.javaeye的blog系统提供了一个blog导入导出的功能,用起来很酷.其实你自己用ruby写一下也很简单,比如我要读取我的blog的RSS源: require 'rss/2.0'require 'open-uri'url = 'http://dennnis-zane.blog.sohu.com/rss'feed = RSS::Parser.parse(open(url).read, false) puts "=== 

ECMAScript对象基础

1.Global对象.这对象之所以特别就是因为它根本不存在!-_-.如果你声明 var pointer=Global: 报错,找不到此对象.这是因为在ECMAScript中,每个函数都某个对象的方法,我们用到的isNaN(),isFinite(),parseInt()和parseFloat()函数,看起来是独立的函数,其实它们都是Global对象的函数. 需要注意两个用于处理url编码的函数: 1)encodeURI()和decodeURI() 处理完整的uri 2)encodeURICompo

深入理解JavaScript系列(18):面向对象编程之ECMAScript实现_基础知识

介绍 本章是关于ECMAScript面向对象实现的第2篇,第1篇我们讨论的是概论和CEMAScript的比较,如果你还没有读第1篇,在进行本章之前,我强烈建议你先读一下第1篇,因为本篇实在太长了(35页). 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/ 注:由于篇幅太长了,难免出现错误,时刻保持修正中. 在概论里,我们延伸到了ECMAScript,现在,当我们知道它OOP

ECMAScript 5严格模式(Strict Mode)介绍_基础知识

严格模式(Strict Mode)是ECMAScript 5的新特性,它允许你把整个程序,或者某个函数,放置在"严格"的操作语境中.这种严格的语境会防止某些特定的操作并抛出更多的异常. 虽然ECMAScript 5对ECMAScript 3是向下兼容的,但是在严格模式下,所有在ECMAScript 3中不赞成使用的特性都被禁用(或抛出错误)而不是兼容. 启用严格模式有以下好处: 1.捕获一些编程错误,并抛出异常. 2.阻止进行一些相对"不安全"的操作(例如访问全局变

你的 mixin 真的兼容 ECMAScript 5 吗?_基础知识

我最近在与客户合作的项目中,需要充分利用的 ECMAScript 5,在此我遇到一个非常有趣的问题. 该问题源于一个非常常见的模式: mixin , 也就是在 JavaScript 中把一个对象的属性或者方法 mixin 到另一个. 大多数 mixin 的功能看起来像这样: 复制代码 代码如下: function mixin(receiver, supplier) {    for (var property in supplier) {        if (supplier.hasOwnPr

深入理解ECMAScript的几个关键语句_基础知识

写在前面 在这一章中我们聊一聊ECMAScript中的几个关键语句switch.for-in.label等语句,加深我们对它们的理解和认识.首先从最常见的说起. while和for while和for是很常规的语句,无论是在JavaScript还是C还是其他编程语言中.而且在编程中我们较常用的也是for,for用起来更灵活,更简单,所以有些人可能就会产生这样一种误解: for比while更强大,能做到while做不到的一些事情. 其实我们稍微想想while和for语句的语法应用,我们就会发现: