【Web】ES6学习笔记(一)
来源:互联网 发布:农行网银助手mac 编辑:程序博客网 时间:2024/06/03 12:35
一.let/var:
1.let所声明的变量,只在let命令所在的代码块内有效。
2.只要块级作用域(?)内存在let,它所声明的变量就绑定这个区域。因此,在let命令声明变量tmp之前,都属于变量tmp的“死区”(程序会报错referenceError)
注:我记得js的for,if是没有块级作用域这个概念的,这里可以理解为在ES6中由于let的引入使for,if具有的块级作用域的概念。
这个新特性,提醒程序员养成良好的编代码习惯,一定要先声明再调用。
3.适合场景:for循环。循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。
for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i);}// abc// abc// abc
4.不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。
5.避免在块级作用域内声明函数。
6.do表达式:为了可以在块级作用域以外获得返回值,可以在块级作用域前加上do,使其变为do表达式。
注:试了谷歌和火狐,貌似都不支持do这个关键字…
7.const命令
const声明一个只读的常量,一旦声明,常量的值就不能改变。const一旦声明变量,就必须立即初始化。const作用域与let命令相同,只在声明所在的块级作用域内有效。
注:const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
8.声明变量
ES6声明变量的6种方法:var ,function,let,const,import,class
9.顶层对象的属性
在浏览器环境指的是window对象,在node指的是global对象。ES6中,var和function命令声明的全局变量,依旧是顶层对象的属性。let,const和class命令声明的全局变量,不属于顶层对象的属性。
二.变量的解构赋值
1.数组的解构赋值
解构赋值允许指定默认值:
如果默认值是一个表达式,那么这个表达式是惰性求值。
上面的代码中,因为xx能取到值,所以函数f根本不会执行,yy由于取不到值,所以将会被赋值。
2.对象的解构赋值
解构不仅可以用于数组,还可以用于对象。
注:下面代码中,let命令下面一行的圆括号是必须的,否则会报错,因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句。
3.和数组一样,解构也可以用于嵌套结构的对象。
4.字符串也可以解构赋值。
5.数值和布尔值的解构赋值:
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
6.不能使用圆括号的情况
(1)变量声明语句中,不能带有圆括号
(2) 函数参数中,模式不能带有圆括号。
函数参数也属于变量声明,因此不能带有圆括号。
(3)赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。
7.可以使用圆括号的情况
可以使用圆括号的情况只有一种:
赋值语句的非模式部分,可以使用圆括号。
[(b)] = [3]; // 正确({ p: (d) } = {}); // 正确[(parseInt.prop)] = [3]; // 正确
8.用途
(1)交换变量的值
let x = 1;let y = 2;[x, y] = [y, x];
(2)从函数中返回多个值
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
// 返回一个数组function example() { return [1, 2, 3];}let [a, b, c] = example();// 返回一个对象function example() { return { foo: 1, bar: 2 };}let { foo, bar } = example();
(3)函数参数的定义
// 参数是一组有次序的值function f([x, y, z]) { ... }f([1, 2, 3]);// 参数是一组无次序的值function f({x, y, z}) { ... }f({z: 3, y: 2, x: 1});
(4)提取json数据
let jsonData = { id: 42, status: "OK", data: [867, 5309]};let { id, status, data: number } = jsonData;console.log(id, status, number);// 42, "OK", [867, 5309]
(5)函数参数的默认值
jQuery.ajax = function (url, { async = true, beforeSend = function () {}, cache = true, complete = function () {}, crossDomain = false, global = true, // ... more config}) { // ... do stuff};
(6)遍历map结构
var map = new Map();map.set('first', 'hello');map.set('second', 'world');for (let [key, value] of map) { console.log(key + " is " + value);}
如果只想获取键名或者键值
/ 获取键名for (let [key] of map) { // ...}// 获取键值for (let [,value] of map) { // ...}
(7)输入模块的指定方法
加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。
const { SourceMapConsumer, SourceNode } = require("source-map");
未完待续….
参考自http://es6.ruanyifeng.com/#docs/destructuring
- 【Web】ES6学习笔记(一)
- ES6学习笔记(一)
- ES6学习笔记(一)
- ES6学习笔记(一)
- ES6学习笔记(一)
- ES6学习笔记(一)let const
- es6 学习笔记(一)箭头函数
- ES6笔记(一)
- 《ES6深入浅出》学习笔记(一)
- ES6学习(一)
- [web]ES6学习笔记(二)
- ES6学习笔记(一)--let和const命令
- ES6入门笔记(一)
- es6学习系列---(一)
- webpack学习ES6(一)
- ES6语法学习(一)
- es6学习过程(一)
- web学习笔记(一)
- 新手怎样快速搭建一个舒服的开发环境(Windows篇)
- Nexus私服的搭建和使用
- Ubuntu 获取 root 权限 (临时&永久)
- IntelliJ IDEA的安装和破解(一)
- Linux脚本攻略学习笔记12
- 【Web】ES6学习笔记(一)
- activity启动流程简述
- 多线程
- ProcessRecord state
- Leetcode141. Linked List Cycle
- WPF listbox 的datatemplate中添加触发器,控制template中某个按钮的显示隐藏
- equals与==的区别
- spring swagge2配置
- 数据挖掘技术(一)——预处理