ECMAScript 6 学习笔记

1.let和const命令

1-1.let和var的区别

加let的作用域是{},var的作用域是一个function内。都不加的话就不是定义变量了,而是定义属性,可以通过delete命令删除。

1-2.let很适合for循环结构,用完即释放,内部可调用

for (let i = 0; i < 10; i++) {}

console.log(i);
//ReferenceError: i is not defined

1-3.解决变量提升的bug

先调用,后声明var类型的变量,回输出undefined,不报错。而let的会报错。重点内容

1-4.暂时性死区

let的优先级更高,可以理解为比局部变量范围更宅的变量,变量可以先使用后定义,是否会报undefined错误取决于是否加载到(一边加载,一边执行)

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

1-5.暂时性死区结束

let和const关键字可以定义死区的结束

if (true) {
  // TDZ开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

1-6.在同一个代码块不允许重复定义

var和不加的情况,是可以重复定义一个变量的,后面定义的会覆盖前面的,而let就不行,会报错。

// 报错
function () {
  let a = 10;
  var a = 1;
}

// 报错
function () {
  let a = 10;
  let a = 1;
}

1-7.不执行并不代表不预加载

就算是false,后面的代码还是会预读,有错误也会报错,但是var的优先级比空的那个高。

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f(); // undefined

1-8.指向内存地址不可变

const

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

2.变量的解析赋值

2-1.花式赋值

多样化的赋值方式

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

2-2.使用默认值

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

2-3.也可以直接给一个对象赋值

let { bar, foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

let { baz } = { foo: "aaa", bar: "bbb" };
baz // undefined

3.字符串的扩展

3-1.字符的Unicode表示法

可以用一个Unicode串表示字符串,和直接输入字符串是等效的。这个好像EC5也可以。

'\u4f60\u597d\u554a\uff0c\u4e16\u754c\u3002'

3-2.of遍历字符串,in遍历数组

for (let codePoint of 'foo') {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

3-3.repeat方法

重复一个字符串n次。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

4.正则的扩展

4-1.实例化一个RegExp对象

var regex = new RegExp('xyz', 'i');
var regex = new RegExp(/xyz/i);
// 等价于
var regex = /xyz/i;

4-2.TODO

5.数值的扩展

5-1.二进制和八进制表示法

要表示2,8,16进制,可以直接用0b,0o,0x开头,后面直接加进制就可以了。

0b111110111 === 503 // true
0o767 === 503 // true
0xa === 10 //true

6.函数的扩展

6-1.可以使用形式参数了(默认值)

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

6-2.函数也有length属性

函数的length属性表示该函数没有指定默认值的参数的个数

(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

6-3.reset参数(略略略)

形参用…,内部通过of循环,实现

function add(...values) {
  let sum = 0;

  for (var val of values) {
    sum += val;
  }

  return sum;
}

add(2, 5, 3) // 10

6-4.name 属性(返回函数的名字)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值