es6【摘抄自网络】
ES6
①let
和const
只能定义变量一次,避免重复定义带来的问题;
②let
和const
会被锁定在声明的代码块{}
内,成为暂时性死区(Temporal Dead Zone
);
③let
和const
两个代码块中拥有各自的变量n
,不会相互影响。
例子: function f1() { if (true) { console.log(n); //输出 10 } console.log(n); // 输出 5 } |
④let
声明不存在变量提升
所谓变量提升,就是之前我们在使用var
声明变量时,变量可以放在声明之前使用,只不过使用还没有声明的变量时,其值为undefined
。但是使用let
声明变量时,如果使用放在声明之前则会报错。
⑤const
除了拥有let
的所有优秀特性(不允许重复声明,有用块级作用域)之外,还有一个特性,那就是它是只读的。
"use strict"
sole.log(s); // returns [5, 6, 45 |
我们将一个新数组[1, 2, 3]赋值给变量s时,其实是企图改变变量s内指针的指向,而因为变量s是使用const命令声明的,其指针指向是固定的,不能变动的,所以程序报错。第二次,我们想修改数组中第二项的值,因为修改数组中某一项的值并不改变数组的地址,变量s内所保存的指针依旧指向原来的地址,所以程序可以成功执行。
⑥Object.freeze(保证复合型数据只可读)
|
⑦箭头函数 (Arrow Functions)
例子: 原 const myFunc = function() { const myVar = "value"; return myVar; } 现 const myFunc = () => "value"
箭头函数可以传参: const doubler = (item) => item * 2; |
⑧为函数的参数设置默认值
function greeting(name = "Anonymous") { return "Hello " + name; } console.log(greeting("John")); // 输出 Hello John console.log(greeting()); // 输出 Hello Anonymous |
⑨rest 参数 (Rest Operator)
function howMany(...args) { return "You have passed " + args.length + " arguments."; } console.log(howMany(0, 1, 2)); // 传入三个参数 console.log(howMany("string", null, [1, 2, 3], { })); // 传入四个参数 |
⑩扩展运算符 (Spread Operator)
扩展运算符其实就是rest参数中的那三个点...,其作用是将数组打散: console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [<div>, <div>, <div>] |
求最大值
const arr = [6, 89, 3, 45]; const maximus = Math.max(...arr); // 返回 89 |
⑪ 解构赋值(Destructuring Assignment)
ES5 var voxel = {x: 3.6, y: 7.4, z: 6.54 }; var x = voxel.x; // x = 3.6 var y = voxel.y; // y = 7.4 var z = voxel.z; // z = 6.54 ES6 const { x, y, z } = voxel; // x = 3.6, y = 7.4, z = 6.54 |
⑫ 模板字符串 (Template String)【用反引号( ` )标识】
const person = { name: "Zodiac Hasbro", age: 56 };
//用模板字符串方式书写的字符串,并将其赋给greeting变量 const greeting = `Hello, my name is ${person.name}! I am ${person.age} years old.`;
console.log(greeting); // 输出: // Hello, my name is Zodiac Hasbro! // I am 56 years old. |
在上面这段代码中,有三个地方需要我们注意:
1.模板字符串的标识符是反引号(`) 而不是单引号(')
2.输出的字符串是多行的,我们在也不需要\n了
3.语法${}可以用来获取变量,化简了之前用+来进行字符串拼接的写法
⑬ class语法糖
⑭ 用取值函数和存值函数(getters and setters)来封装对象
延伸:
Typeof用于检测一个变量的类型,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。
示例 console.log(typeof a); //'undefined' console.log(typeof(true)); //'boolean' console.log(typeof '123'); //'string' console.log(typeof 123); //'number' console.log(typeof NaN); //'number' console.log(typeof null); //'object' var obj = new String(); console.log(typeof(obj)); //'object' var fn = function(){}; console.log(typeof(fn)); //'function' console.log(typeof(class c{})); //'function' |