ES6随笔
JavaScript三大体系:ECMAScript,bom,dom
--------------------------------(ES6指的是ES2015后续的版本)
1.es6中的暂时性死区
- let/const是使用区块作用域;var是使用函数作用域
- 在let/const声明之前就访问对应的变量和常量,会抛出ReferenceError错误;但是在var声明之前就访问对应的变量,则会得到undefined
理解:
- let所声明的变量,只在let命令所在的代码块内有效。在代码块之外调用就会报错。
- 在代码内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
- const声明常量,变量指向的内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但是对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变,就完全不能控制了。
2.解构:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
从数组中提取值,按照对应位置,对变量赋值。
3.模板字符串:是增强版的字符串,用反引号标识。可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
4.函数的扩展:
- 函数参数的默认值
理解:
- ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。
- 好处:阅读代码的人,可以立即意识到哪些参数是可以省略的,在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。
- 参数默认值可以与解构赋值的默认值,结合起来使用
function go2({x=1,y=10}){
console.log('x:'+x);
console.log('y:'+y);
}
go2({x:100,y:200}); - 参数默认值的位置:函数的尾参数;
- 箭头函数
ES6允许使用"箭头"( => )定义函数
- 箭头函数不需要参数或者需要多个参数,就使用一个圆括号代表参数部分 const f1=()=>5;
- 如此理解: var f = v => v; 等同于 var f = function(v){return v;};
- 如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回
const f4=()=>{
let [i,j]=[1,4];
return i+j;
}; - 大括号被解释为代码块,如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。let const f5=()=>({name:'郝敏一',age:27});
- rest参数
- 用于获取函数的多余参数,rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
- rest参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
- 函数的length属性,不包括rest参数。
- ES6的原型链
- 构造函数和原型prototype
(1)原型prototype:每个构造函数都有一个prototype属性,指向一个对象。prototype的本质也是一个JavaScript对象,称为原型对象,这个对象的所有属性和方法都会被构造函数所拥有。因此,可以将一些方法直接定义在prototype上,这样所有对象实例就可以共享这些方法;
(2)作用:原型prototype的作用是共享方法、节约内存;
2. 对象原型__proto__
对象自身的一种属性,它指向原型对象prototype,创建的对象实例里面有__proto__,它指向构造函数的prototype,因此可以使用prototype里面的方法。
3. constructor属性
原型对象prototype和对象原型__proto__里面都有一个constructor属性,constructor可以指回构造函数本身。
4.原型链
成员查找机制 : 实例对象->构造函数原型对象->Object原型对象


浙公网安备 33010602011771号