块级作用域、字符串、函数
- 作用域
在之前的js中,只有函数作用域和全局作用域,指的是变量只能在函数中或者全局中,块级作用域是不存在的。
例:在for循环或while等其他循环中,var 定义一个变量,在外部获取是没问题的,在ES6的的语法中 ,let 一个变量,在大括号外是获取不到的。
const 是定义一个常量,定义之后是无法更改的
- 字符串
var name = "han";
var course = "你好";
//普通写法
console.log("hello," + name + "course is" + course);
//ES6写法 (字符串内回车表示换行)
console.log(`hello,${name},course is ${course}`);
- 函数
//传统写法
function hello(name) {
console.log(`Hello,${name}!`);
}
//ES6写法
const Hello = (name) => {
console.log(`Hello,${name}!`);
}
setTimeout(() => {
console.log('1秒后执行');
}, 1000);
hello("韩贵和");
- 如果函数体只有一句return 函数大括号可以省略
const double = x => x * 2;
console.log(double(5));
const hello = (name = "Han") => {
console.log(`Hello,${name}`);
};
hello();
hello("韩贵和");
function hello(name1, name2) {
console.log(name1, name2);
}
let arr = ['Han', "韩贵和"];
//传统传入数组参数方法
hello.apply(null, arr);
//ES6写法 使用...展开符
hello(...arr);
对象基础、解构
- Object扩展
- Object.keys、values、entries
obj = {name: 'Han', course: "WhatTheHan"};
console.log(Object.keys(obj));
console.log(Object.values(obj));
console.log(Object.entries(obj));
const obj = {
name:"Han",
hello:function () {},
//函数简写
Hello(){}
};
const obj = {name:'Han',course:"Hello"};
const obj2={type:'name',name:'Han'};
console.log({...obj,...obj2});
console.log({...obj,...obj2,date:"2017"});
- 解构赋值
const arr = ["Hello","Han"];
//传统写法
let arg1 = arr[0];
let arg2 = arr[1];
//ES6语法,批量解构赋值
let [arg1,arg2] = arr;
console.log(arg1,'|',arg2);
const obj = {name:'whatthehan',course:'React'};
const {name,course} = obj;
console.log(name,'|',course);
类、模块化
- 提供class的语法糖
- prototype的语法糖
- Extends继承
- Constructor构造函数
class Han{
constructor(){
//构造函数
this.name='HanGH';
}
sayHello(){
console.log(`Hello,${this.name} !`);
}
}
const app = new Han();
app.sayHello();
- 新的数据结构
- Set ,元素不可重和
- Map,对象扩展
- Symbol,生成不重复变量
- 模块化
- ES6中自带了模块化机制,告别sea.js和require.js
- Import , import {}
- Export , Export default
- Node 现在不支持,还需要require来加载文件
其他
- 对象扩展符、函数绑定
- 装饰器
- Async await
- Promise
- 迭代器和生成器
- 代理Proxy
网友评论