ECMAScript的里程碑

起源 1996 年 11月

前情回顾:

Ecma国际

Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。

Netscape

Netscape(网景)公司,是一个自1994年开始的品牌。它亦是网景通讯公司(Netscape Communications Corporation,1994年4月4日—2003年7月15日)的常用简称。网景通讯公司曾经是Netscape Navigator浏览器的生产商
javaScript 的创造者 Netscape 公司将 JavaScript 提交给标准化组织 ECMA(European Computer Manufacturers Association)。

TC39

TC39 是技术委员会第 39 号,是 ECMAScript 规范下的 JavaScript 语言标准化的机构,负责开发 JavaScript 的委员会。

1996 年 11月

JavaScript 的创造者 Netscape 公司将 JavaScript 提交给标准化组织 ECMA

1997年 ES1

ECMA 发布 262 号标准文件(ECMA-262),规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript (ES).

1998年 ES2

1999年 ES3

2000年 ES4 , 2008年终止

2009年 ES5(ES3.1)

2011年 ES5.1

成为 ISO 国际标准(ISO/IEC 16262:2011), 到了2012年底,主流浏览器都支持ECMAScript 5.1的全部功能

2015年 ES2015(ES6)

let

1、变量不能重复生命
2、块及作用(其他作用域全局 、函数,eval)
3、不存在变量提升(好处:)
4、不影响作用域链

//实例:
for(var i=0;i<3;i++){
items[i].onClick=function(){
console.log(i)//一直输入 3
}
}
//区别
for(let i=0;i<3;i++){
items[i].onClick=function(){
console.log(i)//输入 0、1、2
}
}

const:

1、一定要赋值初始值
2、一般常量使用大写(小写也行)
3、常量不能修改
4、是块级作用域
5、对数组和对象的元素修改,不算对常量的修改,不回报错(引用地址没有报错)

解构赋值

数组的结构,对象的结构

const obj=['a','b','c','d']
let ['wang','zhu','li','liu']=obj
let {name,age,run}={
	name:"xiaosan",
	age:14,
	run:function(){
	}
}

模板字符串 ``

引入新的声明字符串方式
1、换行符
2、可以直接出现换行符
3、变量拼接

const a=`我是模板字符串`
const b=`${a}拼接字符串<br><ui><li>我可以解析标签</li></ul>`

箭头函数

this是静态的,this始终指向函数声明时所在的作用域下的this值

 //Call 改变不了this的指向问题
function getName(){
  console.log(this.name)
}

let getName2=()=>{
  console.log(this.name)
}

window.name="你好箭头函数"
const school={
  name:"change"
}
getName.call(school) //change
getName2.call(school)// 你好箭头函数

做了大量的更新,但向后兼容。ES6是一次重大改进。
部分功能:let/const、变量的解构赋值、Promise、箭头函数…

symbol

// 向对象添加到方法 up down

let game={}
let methods={
    up:Symbol(),
    down:Symbol()
}
game[methods.up]=function(){
    console.log('')
}
let home={
    name:'shequ',
    [Symobol('say')]:function(){
        console.log('我是唯一的方法')
    }
} 

// Symbol内置属性
class borther{

}

// 迭代器

const arr=['a','b','c','d']//
let iterator=arr[Symbol.iterator]()
console.log(iterator.next())//{value: "a", done: false}
console.log(iterator.next())//{value: "b", done: false}
console.log(iterator.next())//{value: "c", done: false}
console.log(iterator.next())//{value: "d", done: false}
console.log(iterator.next())//{value: undefined, done: true}

//声明一个对象

const banji={
    name:'班级',
    stus:['一班','二班','三班','四班']
}
// 遍历这个对象
for(let v of banji){
    console.log(v)
}//会报错,banji不是iterator接口
const nanjing={
    name:'南京',
    stus:['玄武','建邺','江宁','秦淮'],
    [Symbol.iterator](){
        let index = 0
        let _this=this
        return{
            next:function(){
                if(index<_this.stus.length){
                    const res={value:_this.stus[index],done:false}
                    index++
                    return res
                }else{
                    return {value:undefined,done:true}
                }
            
            }

        }
    }
}
// 遍历这个对象
for(let v of nanjing){
console.log(v)
}

//生成器其实就是一个特殊的函数
//异步编程 纯回掉函数 node fs ajax

function *create(){
    yield 'aaa';
    yield 'bbb'
    yield 'ccc'
}
let iterator=create()//是回掉函数
console.log(iterator.next())//{value: "aaa", done: false}
console.log(iterator.next())//{value: "bbb", done: false}
console.log(iterator.next())//{value: "ccc", done: false}
console.log(iterator.next())//{value: undefined, done: true}
// 生成器函数是迭代器对象,返回的是iterator接口
// 同上可以进行遍历
for(let v of create()){
    console.log(v)
}

2016年 ES2016(ES7)

2017年 ES2017(ES8)

2018年 ES2018(ES9)

2019年 ES2019(ES10)

2020年 ES2020(ES11)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值