1. 变量定义
let a = 1; //局部变量,块内有效
const a = 1; //常量
var a = 1; //同es5
2. 变量解构
let [a, b, c="ok"] = [1, 2, 3]; //列表方式解构
let {a, b, c} = {a:1, b:2, c:3}; //对象方式解构
3.扩展对象及rest对象
function print(...args) {
console.log(args[0]);
console.log(args[1]);
console.log(args[2]);
}
function print(first, ...args) {
console.log(first);
console.log(args[0]);
console.log(args.length);
}
4. 字符串模板
let blog = `<h1>我的名字是${name}<h1>我是一个初学者。</br>`
5. 数值
Number.isInteger(1)
Number.isFinite(2.3)
Number.SAFE_MIN_NUMBER;
Number.SAFE_MAX_NUMBER;
let value = 0B111; //二进制
let value = 0O111; //八进制
let value = 0x123; //十六进制
6. 数组
let json = {
"0": "A1",
"1": "A2",
"2": "A3",
length: 3
}
let arr = Array.from(json);
let arr1 = Array.of(1,2,3,4,5);
arra1.find(function(value, index, arr) {
return value > 2;
})
arr1.fill("web", 1,3); //替换1,2坐标元素
for(let [value, index] of arr1.entries()) {
console.log(value);
console.log(index);
}
for (let value of arr1) {
console.log(value);
}
for (let key of arr1.keys()) {
console.log(key);
}
7. 箭头函数
() => true;
(a, b) => a+b;
(a, b) => {return a+b;}
8. 对象、数组参数解构
function fun({a, b="ok"}) {
console.log(a, b);
}
let params = {
a: "a",
b: "b"
};
fun(params);
function fun1(a, b) {
console.log(a, b);
}
let params = [1,2];
fun1(...params);
0 in arrs; //判读数组0下标元素是否存在
"a" in objs; //判断a是否在对象中b
let arrs = [1,2,3]
arrs.forEach((val, index) => {
console.log(val, index);
}) //遍历数组
arrs.toString(); //转换成字符串
arrs.join(",");
9. 对象操作
let name="hhan";
let age=34;
let persion={name, age};
let key1="name";
let key2 = "age";
let persion = {[key1]: "hhan", [key2]: 34};
let detail = {"address": "beijing"};
let persion_detail = Object.assign(persion, detail);
Object.is(NaN, NaN); 严格相等
let email = Symbol();
let persion = {"name": "hhan", "age": 34, [email]: "hhan@lushu.co"};
persion[email]; //不能通过persion.email访问
for (let key in persion) {
console.log(persion[key]); //symbol不会被列出
}
10. Set和WeakSet
let set = new Set([1,2,3,4])
set.add(5); //添加元素
set.delete(1); //删除元素
set.clear(); //清空集合
set.has(1); //查找数据
set.size; //集合元素个数
for(ele of set) {
console.log(ele);
}
set.forEach((val)=> console.log(val));
wset = net WeakSet();
let obj = {a: "ok"};
wset.add(obj);
11. map结构
let map = new Map();
map.set("skill", "web");
let json = {"name": "ok"};
map.set(json, "worker");
console.log(map.get(json));
map.delete(json); //删除元素
map.clear(); //清空map
map.size; //元素个数
map.has(json); //查找元素
12. Proxy代理
let obj = {
add: function (a, b) {
return a+b;
} ,
name: "jspang"
}
let proxy = Proxy(obj, {
get: function(target, key, property) {
console.log(target[key]);
return target[key];
},
set: function(target, key, value, receiver) {
//receiver代表原始值
console.log(target, key, value, receiver);
return target[key] = value;
}
})
let proxy = new Proxy(function () {
return "I am jspang.";
}, {
apply(target, ctx, args) {
console.log("do apply");
return Reflect.apply(...arguments);
}
})
13. Promise
function step1 (resolve, reject) {
if (condition1) {
resolve("completed-1");
} else {
reject("reject-1");
}
}
function step2 (resolve, reject) {
if (condition2) {
resolve("completed-2");
} else {
reject("reject-2");
}
}
function step3 (resolve, reject) {
if (condition3) {
resolve("completed-3");
} else {
reject("reject-3");
}
}
new Promise(step1)
.then(function () {
return new Promise(step2);
})
.then(function () {
return new Promise(step3);
}).then(function () {
console.log("completed.");
})
14. class类
class Coder {
name(val) {
return val;
}
}
let jspang = new Coder;
console.log(jspang.name("hello"));
class Coder {
name(val) {
return val;
}
constructor(skill, age) {
this.skill = skill;
this.age = age;
}
}
let jspang = new Coder("web", 33);
class htmler extends Coder {
}
15. export和import
module.js
export var name="jspang";
export var skill ="web";
import {name, skill} from "./module.js"
module.js
var name = "jspang";
var skill = "web";
export {name, skill}
export function add(a, b) {
return a+b;
}
export {
mname as name;
mskill as skill;
}
module.js
export default var name="jspang";
import myname from "./module.js"