【无标题】

、 ECMAScript 6语法

1 ECMAScript和JavaScript的关系

在1996年以前,浏览器是不⽀持脚本语⾔的,只⽀持html和css。

NetScape⽹景公司提出了前端编程语⾔,为了蹭java的热度,起名为JavaScript。并且经过与Sun公司的授权,⽹景公司将JavaScript注册为商标。

1996年,⽹景公司将该脚本提交给标准委员会ECMA。1997年,ECMA将其命名为ECMAScript。因此ECMAScript是国际标

准,JavaScript是标准的实现。

2 ES6与ES5

2011年,ECMAScript5.1发布。⾃此以后,新的标准更新特别频繁,以后统称为ES6。

⽬前的主流浏览器都⽀持ES5,但是对ES6的⽀持不全⾯。

Bable是⼀个ES6转码器,可以将ES6代码转为ES5代码,从⽽在⽼的浏览器执⾏。

Bable的配置⽂件时.babelrc,存放在项⽬的根⽬录下。配置⽂件的基本规则是

{

"presets": [],

"plugins": []

}

3 let和const

js中定义变量⽤var,var存在变量提升现象,即var变量可以在声明之前使⽤。

let不存在变量提升。建议⽤let和const。const表⽰常量,let表⽰变量。

var1

var var1 = 100; //关键词var定义的变量是全局的

// var2 // 因为var2没有定义,所以报错

let var2 = 200; //该处使⽤let定义变量var2

const name = '张三'

// name = '⾥斯' //使⽤const定义的常量不能被重写赋值

4 块级作⽤域

es5只⽀持全局作⽤域和函数作⽤域,es6增加了块级作⽤域。

var a = 19;

{

var a = 20;

}

console.log('输出a=', a) //输出a=20

let b=10;

{

let b=30;

}

console.log('输出b=', b) //输出b=10 //块级作⽤域的范围仅限于{...}之内

类似于多重赋值,使⽤符号[]或者{}。

let a,b = [1,2] //定义了⼀个变量a,没有赋值;定义了⼀个变量b,赋值了

console.log('a=', a, 'b=',b) //a= undefined b= [ 1, 2 ]

let [c,d] = [1,2] //解构,使⽤[]

console.log('c=', c, 'd=',d) //c= 1 d= 2

// 对象的结构,使⽤{}

let {name, age} = {'name':'wuchao', 'age':23}

console.log('name=', name, 'age=',age)

let {id, ...other} = {'id':10, 'name':'wuchao', 'age':23, 'address':'北京市', 'school':'ucas'}

console.log('id=', id, 'other=',other) //id= 10 other= { name: 'wuchao', age: 23, address: '北京市', school: 'ucas' }

// 提取json数据

let jsonData = {id:42, name:'吴超'}

let {id, name} = jsonData

对象的解构赋值,可以很⽅便的将现有对象的⽅法,赋值到某个变量。在node中很常⽤。

// 把Math类中的三个⽅法解构赋值

let {log, sin, cos} = Math;

// 把console类中的log⽅法解构赋值;

const {log} = console;

log('hello')

// 下⾯是输⼊模块的指定⽅法

const {SourceMapConsumer, SourceNode} = require('source-map')

6 字符串的扩展

6.1 es6⽀持unicode

⽐如“\u0061”表⽰”a“。

6.2 遍历字符串

// 遍历字符串

for(let i of 'foo'){

console.log(i)

}

6.2 模板字符串

let name ='张三' , age =23

let s1 = '我的名字叫'+name+',年龄是'+age // 字符串拼接

console.log('s1=', s1)

let s2 = '我的名字叫${name},年龄是${age}' // 这⾥使⽤单引号,不会解析变量

console.log('s2=', s2)

let s3 = `我的名字叫${name},年龄是${age}` // 使⽤飘号,可以解析⾥⾯的变量

console.log('s3=', s3)

6.3 标签模板

标签模板相当于函数调⽤。飘号相当于函数的参数。

alert`hello` 等同于 alert(['hello'])

let s = 'Hello world!'

s.includes('o') //true

s.startsWith('Hello') //true

s.endsWith('!') //true

'x'.repeat(3) //'xxx'

'x'.padStart(5, 'ab') //'ababx'

'x'.padEnd(5, 'ab') //'xabab'

' abc '.trim() //'abc'

7 函数的扩展

7.1 参数的默认值

es6之前的函数参数,不能使⽤默认值。

function log(x, y='world'){...}

7.2 与解构赋值默认值结合使⽤

// 定义

function foo({x, y=5}){...}

// 调⽤

foo({}) //undefined 5

foo({x:1}) //1 5

foo({x:1, y:2}) // 1 2

foo() // TypeError

// 定义

function fetch(url, {body='', method='GET', headers={}}){...}

// 调⽤

fetch('http://www.baidu.com', {}) //GET

fetch('http://www.baidu.com') //报错

7.3 rest参数

es6引⼊rest参数(形式为 …变量名),⽤于获取函数的多余参数。rest参数搭配的变量是⼀个数组。

function add(...values)

add(1,2,3)

7.4 箭头函数

function f1(a, b){return a+b;}

// 箭头函数

(a, b)=>{

console.log('进⼊了箭头函数', )

return a+b

}

// 简洁写法

(a, b)=>a+b

// 常⽤作匿名函数

[1,2,3].map(x=>x*x)

// 箭头函数体内的this对象,就是定义时所在的对象,⽽不是使⽤时所在的对象

function foo(){

setTimeout(()=>{

console.log(this.id)

}, 100)

}

var id=21

foo.call({id:42}) // 42

8 数组扩展

9 对象的扩展

ES6允许在⼤括号⾥⾯,直接写⼊变量和函数,作为对象的属性和⽅法。

9.1 属性简写

const name = "吴超"

const baz = {name} // {name:"吴超"}

上⾯的代码中,变量foo直接写在⼤括号中。这时,属性名就是变量名,属性值就是变量值。

function f1(name, age){

return {name, age}

}

f1("张三", 23) // Object {name:'张三', age:23}

9.2 ⽅法简写

以前的写法是

{

f1:function(){return "f1"}

}

新的写法是

{

f1(){return "f1"}

}

9.3 对象的定义

现在,使⽤属性、⽅法的简写,就可以⾮常⽅便的定义⼀个对象

const person = {

id,

name:'张三',

say(msg){

return 'hello '+msg

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值