ECMA-262规范 定义了ECMAScript支持的一套关键字,这些关键字标识了ECMAScript语句的开头和/或结尾。根据规定,关键字是保留的,不能用做变量名或函数名。下面是ECMAScript关键字的完整列表:web
break else new var typeof编程
case finally return void数组
catch for switch while浏览器
default if throw delete安全
in try do instanceof编程语言
若是把关键字用做变量名或函数名,可能获得诸如“Indetifier expected”(应该有标识符)这样的错误信息。wordpress
ECMA-262的保留字函数
ECMAScript定义了一套保留字,保留字在某种意义上是为了未来的而保留的单词。所以,保留字不能被用做变量名或函数名。ECMA-262第3版中保留字的完整列表以下:this
abstract enum int short编码
boolean export interface static
byte extends long super char final
native synchronized class float package
throws const goto private transient debugger
implements protected volatile double
import public
若是将保留字用做变量名或函数名,那么除非未来的浏览器实现了该保留字,不然极可能收不到任何错误消息。当浏览器将其实现后,该单词被看做关键字,如此将出现关键字错误。
1995年Netscape公司发布的Netscape Navigator 2.0中,发布了与Sun联合开发的JavaScript 1.0而且大获成功, 而且随后的3.0版本中发布了JavaScript1.1,恰巧这时微软进军浏览器市场,IE 3.0搭载了一个JavaScript的克隆版-JScript, 再加上Cenvi的ScriptEase(也是一种客户端脚本语言),致使了三种不一样版本的客户端脚本语言同时存在。为了创建语言的标准化,1997年JavaScript 1.1做为草案提交给欧洲计算机制造商协会(ECMA),第三十九技术委员会(TC39)被委派来“标准化一个通用的,跨平台的,中立于厂商的脚本语言的语法和语意标准”。最后在Netscape、Sun、微软、Borland等公司的参与下制订了ECMA-262,该标准定义了叫作ECMAScript的全新脚本语言。
今后之后的Javscript,JScript,ActionScript等脚本语言都是基于ECMAScript标准实现的。
因此,ECMAScript其实是一种脚本在语法和语义上的标准。实际上JavaScript是由ECMAScript,DOM和BOM三者组成的。 因此说,在JavaScript,JScript和ActionScript中声明变量,操做数组等语法彻底同样,由于它们都是ECMAScript。可是在操做浏览器对象等方面又有各自独特的方法,这些都是各自语言的扩展。
自第三版发布以来,ECMAScript因其与万维网的关联而得到了普遍应用,它实质上已经成为全部web浏览器都提供的一种编程语言。为编制第四版ECMAScript,人们作了大量的工做。尽管这些工做没能完成,也没有发布第四版标准,却促进了该语言的进化。ECMAScript第五版(发布为ECMA-262 5th edition)编入了不少事实上已经在浏览器实现中造成共识的语言规范解析,而且增长了对自第三版发布以来出现的新功能的支持。这些新功能包括访问器属性、反射建立和对象检测、属性特性的程序控制、新增数组操做函数、JSON对象编码格式、以及提供了改进的错误检查和程序安全性的严格模式。
ES5 整体来讲改动不多,最重要的是以下几个改动。这里先简单介绍一下,稍后有相应篇章详细描述。
能够在函数定义的第一行经过一个字符串语法把这个函数声明为 严格模式
function() {
"use strict";
}
在严格模式下,会有以下一些限制:
默认支持 JSON.parse 和 JSON.stringify
如今能够对一个对象的属性设置 getter setter:
var obj = {};
Object.defineProperty(obj, "name", {
get: function() {
return name.toUpperCase();
},
set: function(n) {
name=n;
}
})
能够定义一个对象的属性是否能够修改、是否能够删除、是否能够添加:
Object.defineProperty( obj, "value", {
value: true,
writable: false,
enumerable: true,
configurable: true
});
如今能够直接冻结一个对象,冻结分两种:
如今能够更方便的遍历对象的属性了:
数组新增了以下经常使用的方法:
因此你能够放心的写以下代码:
[1,2,3].map(function(a){return a*a;})