标签:国际 git 范围 date 规格 2.0 查看 bsp asc
ECMAScript 6.0(简称 ES6)是 JavaScript 语言的下一代标准,于 2015 年 6 月正式发布。
1996 年 11 月,JavaScript 的创造者 Netscape 公司,希望JavaScript能够成为国际标准,将其提交给标准化组织 ECMA。次年,ECMA 发布了ECMAScript 1.0 版。不叫 JavaScript的原因:一是商标,JavaScript 已被 Netscape 公司注册为商标;二是体现其制定者是 ECMA,不是 Netscape,有利于保证其的开放性和中立性。
前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 Jscript 和 ActionScript)。
语法提案的批准流程
任何人都可以向标准委员会(又称 TC39 委员会)提案,要求修改语言标准。
一种新的语法从提案到变成正式标准,需要经历五个阶段。每个阶段的变动都需要由 TC39 委员会批准。
- Stage 0 - Strawman(展示阶段)
- Stage 1 - Proposal(征求意见阶段)
- Stage 2 - Draft(草案阶段)
- Stage 3 - Candidate(候选人阶段)
- Stage 4 - Finished(定案阶段)
一个提案只要能进入 Stage 2,就差不多肯定会包括在以后的正式标准里面。ECMAScript 当前的所有提案,可以在 TC39 的官方网站Github.com/tc39/ecma262查看。
ECMAJavaScript 历史:
1998年6月,ECMAScript 2.0版发布。
1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准。
2007年10月,ECMAScript 4.0版草案发布,对3.0版做了大幅升级,预计次年8月发布正式版本。草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。
2008年7月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5。
2009年12月,ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。
2011年6月,ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。
2013年3月,ECMAScript 6草案冻结,不再添加新功能。新的功能设想将被放到ECMAScript 7。
2013年12月,ECMAScript 6草案发布。然后是12个月的讨论期,听取各方反馈。
2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015。
ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司。TC39的总体考虑是,ES5与ES3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。
先回顾一下JavaScript 中的声明变量 var
- 函数作用域
function sum(){ var a=10; } console.log(a);//结果会报错
- 可重复声明
var a=10; var a=20; console.log(a);//结果为20
- 有变量提升的现象
console.log(a);//结果为undefined,声明提前,赋值不提前 var a = 10;
- 可先声明后赋值
var a; a = 10; console.log(a);//结果为10
let声明变量
{let a=20;} console.log(a);//报错
例子:
//使用var
var a = []; for (var i = 0; i < 5; i++) { a[i] = function () { console.log(i); }; } a[3](); // 结果为5
//使用let
var a = []; for (let i = 0; i < 5; i++) { a[i] = function () { console.log(i); }; } a[3](); // 结果为3
let a=20; let a=10; console.log(a);//报错
console.log(a);//报错 let a=20;
let
命令声明变量之前,该变量都是不可用的),简称TDZ
var a = 123; if (true) { a = ‘abc‘; let a;//在let命令声明变量a之前,都属于变量a的“死区”。 }
注:使用let声明变量时,只要变量在还没有声明完成前使用,就会报错。
let x=x;//在变量x的声明语句还未执行完成前去取x的值,导致报错”x 未定义“。
const a; a=20; console.log(a);//报错
let [a, b, c] = [1, 2, 3];//相当于let a = 1;let b = 2;let c = 3;
undefined
。
let [a, [[b], c]] = [1, [[2], 3]];//a = 1,b = 2,c = 3 let [x, , y] = [1, 2, 3];//x = 1,y = 3 let [head, ...tail] = [1, 2, 3, 4];//head = 1,tail = [2, 3, 4] let [x, y, ...z] = [‘a‘];//x = "a",y:undefined,z:[] let [x, y] = [1, 2, 3];//x = 1, y = 2 let [a, [b], d] = [1, [2, 3], 4];//a = 1,b = 2,d = 4
注:若等号右边非数组,即不可遍历的结构,将会报错。
let [a] = 1;//报错
let [x, y, z] = new Set([‘a‘, ‘b‘, ‘c‘]);
let [x, y = ‘b‘] = [‘a‘]; // 或let [x, y = ‘b‘] = [‘a‘, undefined]; x=‘a‘, y=‘b‘
注:ES6 用严格相等运算符(===
),判断一个位置是否有值。只有当一个数组成员严格等于undefined
,默认值才会生效。(null
不严格等于undefined
)
let [x = 1] = [undefined];//x = 1 let [x = 1] = [null];//x:null
let [x = 1, y = x] = []; // x=1; y=1 let [x = 1, y = x] = [2]; // x=2; y=2 let [x = 1, y = x] = [1, 2]; // x=1; y=2 let [x = y, y = 1] = []; //报错,x用y做默认值时,y还未声明。
var a = 10,b = 20; var [a, b] = [b, a]; console.log(a, b); //a = 20,b = 10
let [a, b] = ‘hi‘; // a=‘h‘,a=‘i‘
undefined
。
let { a, b } = { a: "aa", b: "bb" }; // a="aa",b="bb" let { c } = { a: "aa"};//c: undefined
let { a: c } = { a: ‘aa‘}; //c = "aa"
注:对象的解构赋值是先找到同名属性,再赋给对应的变量。真正被赋值的是后者,而非前者。
var {x:y = 3} = {}; //y= 3
注:默认值生效的条件:对象的属性值严格等于undefined
。
(未完,晚点继续更新)
标签:国际 git 范围 date 规格 2.0 查看 bsp asc
原文地址:https://www.cnblogs.com/writerW/p/8994633.html