ES6学习之关键字
前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法。->在线ES6转换为ES5工具。
本系列学习随笔参考了阮一峰老师的《ES6标准入门》。
一、let关键字
1、解决变量提升现象
我们在js中定义变量时,用var声明会出现这种情况:
console.log(a); //不会报错,输出为undefined
var a=1;
这就是js的变量提升现象,当浏览器在解析函数时,会将var 声明的变量声明到函数的最前端,导致变量在声明之前使用不会报错,此时let关键字就解决了这个问题。let的作用域只在当前的代码块起作用。
console.log(a); //ReferenceError:a is not defined
let a=1;
2、不同代码块互不影响
由于let关键字作用只在当前代码块中起作用,所以不会受外部影响。
function n() {
  let a = 1;
  if (true) {
    let a = 5;
  }
  console.log(a); // 输出1
};
3、同一代码块不能重复定义
{
    var a=1;
    var a=2;//无报错
}
{
	let a=1;
	let a=2;//Uncaught SyntaxError: Identifier 'a' has already been declared
}
二、const关键字
1、const声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI = 3;//Uncaught TypeError: Assignment to constant variable.
其本质是对象所存储的内存地址不可变。
const PI={}
PI.num=3.14159;//不会报错
PI={num=3.14159};//VM1187:1 Uncaught SyntaxError: Identifier 'PI' has already been declared
2、const声明的常量必须声明时就赋值;
const PI; // SyntaxError: Missing initializer in const declaration
3、const声明的常量跟let的作用域一样。
if (true) {
  const PI = 3.14159;
}
console.log(PI); // Uncaught ReferenceError: PI is not defined
三、super 关键字
我们都知道,this关键字总是指向函数所在的当前对象,ES6又新增super关键字,指向当前对象的原型对象。他有两种使用方式:
1、当做函数使用
class parent {
    constructor() {
        console.log(11)
    }
}
class child extends parent{
    constructor() {
        super();
    }
}
let c = new child();//打印11
当做函数使用时,super()调用会生成一个空对象,作为context来调用父类的constructor,返回this对象,作为子类constructor的context继续调用构造函数。
2、当做对象使用
const proto = {
  foo: 'hello'
};
const obj = {
  foo: 'world',
  find() {
    return super.foo;
  }
};
Object.setPrototypeOf(obj, proto);
obj.find() // "hello"
上面代码中,对象obj.find()方法之中,通过super.foo引用了原型对象proto的foo属性。
3、注意区分super与this
说到super与this的区别,我们就要先来看一下this关键字:
this关键字最终指向的是调用它的对象。我们可以看下面两个例子;
function GetThis(){
	console.log(this);
};
GetThis();//打印出window对象。
为什么会这样呢。其实最后的调用我们也可以写成window.GetThis();调用他的就是window对象。
如果不信的话我们可以再举个例子;
var getThis={
	user:'me',
	fn:function(){
		console.log(this);
	}
}
getThis.fn();//打印的就时getThis对象;
接下来我们再看一个this与super结合的例子就能理解了:
const proto = {
  x: 'hello',
  foo() {
    console.log(this.x);
  },
};
const obj = {
  x: 'world',
  foo() {
    super.foo();
  }
}
Object.setPrototypeOf(obj, proto);
obj.foo()// "world"
上面代码中,super.foo指向原型对象proto的foo方法,但是绑定的this却还是当前对象obj,因此输出的就是world。
ES6学习之关键字的更多相关文章
- es6学习笔记-class之继承
		
继承 上一篇学习了class的概念,在es5时,对象的继承有好几种,原型链继承,借用构造函数继承,组合继承,原型式继承,寄生式继承以及寄生组合式继承,都是按照函数的形式去集成的,现在class也有它的 ...
 - es6学习笔记-class之一概念
		
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
 - ES6学习笔记<五> Module的操作——import、export、as
		
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
 - ES6学习笔记<三> 生成器函数与yield
		
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
 - ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
		
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
 - ES6学习笔记<一>  let const class extends super
		
学习参考地址1 学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...
 - ES6学习目录
		
前面的话 ES6是JavaScript语言的下一代标准,已经在 2015 年 6 月正式发布.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言 为什么要学 ...
 - 用es6的class关键字定义一个类
		
es6新增class关键字使用方法详解. 通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法 ...
 - javascript的ES6学习总结(第二部分)
		
1.数组循环 介绍数组循环之前,先回顾一下ES5数组的循环 (1)数组遍历(代替普通的for):arr.forEach(callback(val,index,arr){todo}) //val是数组的 ...
 
随机推荐
- CUDA-存储器
			
1.类型(8种) register: GPU片内 device可读\写 shared memory:GPU片内 device可读\写 local memory:板载显存 device可读\写 cons ...
 - XE下显示托盘图标(TrayIcon)
			
https://www.cnblogs.com/studypanp/p/4930619.html XE下显示托盘图标(TrayIcon) 1.拖一个TrayIcon控件 2.拖一个Applicat ...
 - 在 Linux 上如何挂载 qcow2 磁盘镜像
			
1.下载qemu-nbd工具 sudo apt-get install qemu-utils 或者 sudo yum install qemu-img 2.加载nbd模块,然后挂载 sudo modp ...
 - docker 安装Nginx
			
1.使用镜像加速拉取nginx [root@192 ~]# $ docker pull registry.docker-cn.com/library/nginx:1.15 2.通过docker run ...
 - 使用 JSON-lib 出现异常 java.lang.reflect.InvocationTargetException
			
我是在使用json时引起的这个异常,上面是使用json-lib用到的几个jar包,原因是在commons-lang3-3.1.jar这个jar上,commons-lang3和commons-lang会 ...
 - 用jQuery修改右键菜单
			
概述 以前在网上找过屏蔽右键菜单的代码,也找过屏蔽F12的代码,今天无意之中看到别人的右键菜单很有意思,我也想来搞一个. 思路 建立一个菜单并且隐藏起来. 用window.oncontextmenu屏 ...
 - 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
			
[原文链接]:MyBatis JdbcType 与Oracle.MySql数据类型对应关系详解 1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 2. Mybatis ...
 - vscode 编辑器常用快捷键
			
最近,打算换个编辑器,而 vscode 是一个不错的选择.大部分快捷键和 sublime 还是很像的,但有些也不一样.特此整理一份小笔记. 参考: vscode: Visual Studio Code ...
 - 机器学习框架之sklearn简介
			
简介 今天为大家介绍的是scikit-learn.sklearn是一个Python第三方提供的非常强力的机器学习库,它包含了从数据预处理到训练模型的各个方面.在实战使用scikit-learn中可以极 ...
 - 机器学习技法笔记:12 Neural Network
			
Roadmap Motivation Neural Network Hypothesis Neural Network Learning Optimization and Regularization ...