目录
-
const
const 声明一个只读的常量。一旦声明,常量的值就不能修改,这也意味着一旦声明,必须马上赋值。当然与 let 一样,只在声明所在的块级作用域内有效和不可重复声明。
本质:const 实际保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const
只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
-
undefined 和 null
undefined 值在布尔类型环境中会被当做 false ,在数值类型环境中 undefined 会被转换成 NaN。
当对一个 null 变量求值时,空值 null 在数值类型环境中会被当做 0 来对待,而布尔类型环境中会被当做 false 。
-
箭头函数
如果箭头函数不需要参数或者需要多个参数,就使用一个圆括号代表参数部分
var f = () => 5;
// 等同于
var f = function () { return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
-
严格模式
变量必须声明后再使用
函数的参数不能有同名属性,否则报错
不能使用with
语句
不能对只读属性赋值,否则报错
不能使用前缀 0 表示八进制数,否则报错
不能删除不可删除的属性,否则报错
不能删除变量delete prop
,会报错,只能删除属性delete global[prop]
eval
不会在它的外层作用域引入变量
eval
和arguments
不能被重新赋值
arguments
不会自动反映函数参数的变化
不能使用arguments.callee
不能使用arguments.caller
禁止this
指向全局对象
不能使用fn.caller
和fn.arguments
获取函数调用的堆栈
增加了保留字(比如protected
、static
和interface
-
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 的输出,也必须遵守这样的写法: