最近把阮一峰老师的es6入门看了一下,整理了里面的一点例子方便观看和复习
function bar(x = y, y = 2) {
return [x, y];
};
bar() // 报错,暂时性死区function () {
console.log(tmp);
if (false) {
var tmp = "hello world"
}
};
f(); // undefinedfunction f() {
console.log("outside");
}
(function () {
if (false) {
function f() {
console.log("inside")
}
}
}());
//es5 inside
//es6 outsideconst foo = Object.freeze({});
foo.prop = 123;// 不起作用// 彻底冻结对象,包括属性
var constantize = function (obj) {
Object.freeze(obj);
Object.keys(obj).forEach( (key , value) => {
if ( typeof obj[key] === "object") {
constantize(obj[key]);
}
})
}
// constants.js模块
const A = 1;
const B = 2;
// text1.js模块
import * as constants from "./constants.js";
console.log(constants.A);
console.log(constants.B);
//text2.js模块
import {A , B} from "./constants.js";
console.log(A);
console.log(B);
var 声明的全局变量就是全局对象(window)的属性,node.js中,模块的全局变量必须显式的声明成global对象的属性。let、const、class声明的全局变量不属于全局对象的属性。
变量的解构赋值
let [a, [b, [c]]] = [1, [2, [3]]];结构不成功,变量等于undefined
注意,等号左边的值必须转换成对象后具有iterator接口,或者本身具有iterator接口
var [a, [b, [c]]] = [1, [2, [3]]];
function* fibs() {
var a = 0;
var b = 1;
while (true) {
yield a;
[a, b] = [b, b + a];
}
}
var [one, two, three, four] = fibs();fibs本身是一个generator函数,本身具有iterator接口。
对象的解构赋值
实际上,对象的解构赋值相当于这样,先找到同名属性,然后再将值赋值给对应的变量
let {foo: foo, baz: baz} = {foo: 123, baz: 234};let baz
let {bar : baz} = {bar : 1}//报错,Duplicate declaration "baz"var node = {
loc: {
start: {
line: 1,
column: 2
}
}
}
var {loc: {start: {line}}} = node;
这里loc和start都是模式不会被赋值默认值
var {message : msg = "a msg"} = {};
var {x = 3} = {x : undefined};var x;
({x} = {x: 1});//没有()的话,js会把{}解析成代码块,从而发生语法错误数值和布尔值的赋值
先转换成对象
let {toString: s} = 123;
s === Number.prototype.toString;
let {toString: s} = true;
s === Boolean.prototype.toString;null和undefined无法转换成对象,所以无法解构赋值
字符串的Unicode表示方法
6种字符串表示方法
'\z' === 'z';
'\172' === 'z';
'\x7A' === 'z';
'\u007A' === 'z';
'{\u007A}' === 'z';codePointAt()
var s = "我是";
s.charCodeAt();
s.codePointAt();都是转换成码点,但是第二个方法能识别四字节的字符,其参数是该字符在字符串的位置,还是建议使用for...of循环
function is32bit(a) {
return a.codePiontAt() > 0xFFFF;
}
判断四字节最简方法