ES6 (阮一峰日志)学习笔记

目录

 

严格模式

export 

import

export default

对象的解构赋值


  • 严格模式

变量必须声明后再使用

函数的参数不能有同名属性,否则报错

不能使用with语句

不能对只读属性赋值,否则报错

扫描二维码关注公众号,回复: 2763850 查看本文章

不能使用前缀 0 表示八进制数,否则报错

不能删除不可删除的属性,否则报错

不能删除变量delete prop,会报错,只能删除属性delete global[prop]

eval不会在它的外层作用域引入变量

evalarguments不能被重新赋值

arguments不会自动反映函数参数的变化

不能使用arguments.callee

不能使用arguments.caller

禁止this指向全局对象

不能使用fn.callerfn.arguments获取函数调用的堆栈

增加了保留字(比如protectedstaticinterface



  • export 

ES6 模块不是对象,而是通过 export 命令显示指定输出的代码,再通过 import 命令输入。

export 命令用于规定模块的对外接口。

// 写法一
export var m = 1;

// 写法二
var m = 1;
export {m};

// 写法三
var n = 1;
export {n as m};

但是一下两种写法都是错误的:

// 报错
export 1;

// 报错
var m = 1;
export m;

上面两种写法都是错误的,因为没有提供对外的接口。第一种写法直接输出 1 ,第二种写法通过变量 m ,还是直接输出1 。1 只是一个值,不是接口。

同样的,function 和 class 的输出,也必须遵守这样的写法:

// 报错
function f() {}
export f;

// 正确
export function f() {};

// 正确
function f() {}
export {f};

最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,下一节的import命令也是如此。这是因为处于条件代码块之中,就没法做静态优化了,违背了 ES6 模块的设计初衷。



  • import

// main.js
import {firstName, lastName, year} from './profile.js';

function setName(element) {
  element.textContent = firstName + ' ' + lastName;
}

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。

import 命令输入的变量都是只读的。

import 后面的 from 指定模块文件的位置,可以是相对路径,也可以是绝对路径, .js 后缀可以省略。如果只是模块名,不带有路径,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。

  • export default

如果只是使用 export 的话,使用 import 命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。这就比较麻烦。

export default 后面输出的变量或者函数不需要加大括号 { } ,别的地方用 import 导入的时候也不需要有大括号 { } ,而且函数名或者变量名随便取。

  • 对象的解构赋值

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

对象的解构与数组有一个重要的不同。数组的元素是按照次序排列的(并且用中括号[ ] 扩起变量名),变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能‘取到’ 正确的值。

实际上,

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

对象的结构赋值的内部机制,实现找到同名属性,然后再赋给对应的变量。真正被复制的是后者,而不是前者。

let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined

上面代码中,foo 是匹配模式,baz 才是变量。真正被赋值的是变量 baz ,而不是 foo。

猜你喜欢

转载自blog.csdn.net/bingo_ShenWei/article/details/81669824