ES6常见用法--ECMAScript 6.0

一.let和const

块级作用域

JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。

块: 由 { } 构成,if语句和for语句里面的{ }也属于块,对象的大括号内不是一个块级作用域, 因为它里面不能直接声明变量;

if和for没有块级作用域,用var定义的变量可以在外面访问到.

函数有块级作用域,通过var定义的变量不能在外面访问到.

ES5的var没有块级作用域,块里面用var定义的变量可以在外面访问到。

ES6的let有块级作用域,块里面用let定义的变量不能在外面访问到。用于if和for,间接让if和for有了块级作用域.

ES6的const有块级作用域,块里面用const定义的常量不能在外面访问到。

const用于修饰常量,不可以再次赋值.

  • 必须要赋值初始化
  • 不能二次赋值,但如果常量是一个对象,可以改变对象内部的属性.

二.对象字面量增强写法

不用键值对的方式

1.属性:

const name = 'pll';
const age = 20;
const obj = {
	name,
	age
}

2.函数

const obj = {
	run() {},
	eat() {}
}

三. 遍历

1.遍历对象

for(let book in books)

2.遍历数组

for(let book of books)

四. 语法

  • Tab键上面的` 可以包裹字符串,代替引号,作用是可以换行.

五. 定义类

新增语法–构造器constructor

new实例的时候,会自动调用constructor里的方法

class person {
    constructor(name = 'pll') {
        this.name = name;
    }
}

let a = new person();
console.log(a);  //{ name: 'pll' }

let b = new person('张三');
console.log(b); //{ name: '张三' }

继承

class child extends person {}
console.log(new child());  //{ name: 'pll' }

继承传参

重写constructor,修改name,新增age

class child_a extends person {
    constructor(name = 'child', age = 20) {
        super(name);  //必须放在前面
        this.age = age;
    }
}
console.log(new child_a());  //{ name: 'child', age: 20 }  
console.log(new child_a('李四', 60));  //{ name: '李四', age: 60 }

六.函数

默认参数

function fn(age=17){
 console.log(age);
}

fn();     // 17
fn(18);   // 18

使用函数默认参数时,不允许有同名参数。

// 不报错
function fn(name,name){
 console.log(name);
}
fn('pll', 'qq');  //qq
 
// 报错
function fn(name,name,age=17){
 console.log(name+","+age);
}

不定参数

function fn(...values) {
    console.log(values);
    console.log(values.length);
}
fn(1, 4);  

结果为:

[1,4]
2

七.解构赋值

1.数组解构

const nums = [1, 3, 8]
const [a, b, c] = nums
console.log(a); //1
console.log(b); //3
console.log(c); //8

可嵌套

let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3

可忽略

let [a, , b] = [1, 2, 3];
// a = 1
// b = 3

不完全解构

let [a = 1, b] = [];  
// a = 1, b = undefined

剩余运算符

let [a, ...b] = [1, 2, 3]; 
//a = 1 
//b = [2, 3]

字符串

let [a, b, c, d, e] = 'hello'; 
// a = 'h'  b = 'e'  c = 'l'  d = 'l'  e = 'o'

2.对象解构

const obj = {
    name: 'pll',
    age: 20
}
//赋值变量名必须和目标对象的属性名一致
const { name, age } = obj;
console.log(name);  //pll
console.log(age);  //20
let { baz : foo } = { baz : 'ddd' };
console.log(foo);  //ddd

可嵌套可忽略

let obj = {p: ['hello', {y: 'world'}] }; 
let {p: [x, { y }] } = obj; 
// x = 'hello' // y = 'world' 
let obj = {p: ['hello', {y: 'world'}] }; 
let {p: [x, {  }] } = obj; 
// x = 'hello'

不完全解构

let obj = {p: [{y: 'world'}] }; 
let {p: [{ y }, x ] } = obj; 
// x = undefined // y = 'world'

剩余运算符

let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}; 
// a = 10 // b = 20 // rest = {c: 30, d: 40}

解构默认值

let {a = 10, b = 5} = {a: 3}; 
// a = 3; b = 5; 
let {a: aa = 10, b: bb = 5} = {a: 3}; 
// aa = 3; bb = 5;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值