ES6(一)

一、let 和 const 命令

let 命令

1.块级作用域(区分:全局变量和局部变量)只有在 { } 内有效,与function无关

for (let i=0; i< btns.length; i++) {
				var btn = btns[i];
				btn.onclick = function(){
					
				}
				console.log(i); //打印i为1、2、3、4、5,
				// 如果是var i= 0;打印结果是5、5、5、5、5

			}

			for (var i = 0; i < btns.length; i++) {
				(function(index){
					var btn = btns[index];
					btn.onclick = function(){
						console.log(index); //打印i为1、2、3、4、5
                           //实际即为全局变量i赋值给了局部变量index,打印的是局部变量
					}
				})(i);
			}

2.不存在变量作用域提升,使用let必须先声明再使用

3.不允许重复声明

4.暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

5.顶层对象属性:全局变量和window没有关系,严格区分window对象与全局对象

6.函数块级声明

const命令

const声明常量

1.一旦声明不可改变,一般定义常量使用全部大写(开发规范)

2.不能重复声明

3.声明必须赋值 ,防止意外修改变量

4.先声明后使用 ,作用域和let一样

5.对象常量,内容可变 ,对象常量本身的引用地址不能变,但是引用的内容可以修改

二、解构赋值

1.数组结构

step1: 数组解构

let a = 1;
let b = 2;
let c = 3;
ES6 允许写成下面这样。
let [a, b, c] = [1, 2, 3];

step2:数组嵌套

 

2.对象解构

let arr= [0,1,2,3];

let {length} = arr;  //length 打印出为4
//相当于 let {length} = {length: 4},因为数组对象中有这个length

应用:如何快速提取多层JSON数据,使用解构赋值

3.字符串的解构赋值 

字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

let {length : len} = 'hello';
len // 5

4.数值和布尔值的解构赋值

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值。

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。

let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError

三、函数参数默认值

此处加={}为了后面ajax方法调用时不传值也能有默认值,解构不报错,传值则会覆盖掉{}

上面为给函数指定了默认值,后面为给函数指定了默认对象,所以没有默认值就是undefined

四、number数值扩展

一、JS进制问题

1. 2进制 0b(ES6)

2. 8进制 0o(ES6), 

3. 10进制

4. 16进制 0x

二、指数运算 **

2**3 = 8

三、Number.isSafeInteger安全整数

JS能表示的最大整数在(-2^53 ,2^53)之间,超出范围后计算结果就不精确了

Number.isSafeInteger(Math.pow(2, 53));//false

Number.isSafeInteger(Math.pow(2, 53)-1);//true

四、Number.isFinite数值有限

Number.isFinite()用来检查一个数值是否为数字

对数值有效,非数值一律返回false

Number.isFinite(30);//true
Number.isFinite(Nan) ; //false

五、Number.isNaN() 判断是否为空,空为true

NaN:不是一个有意义的数字

是用来检查一个值是否为NaN,对数值有效,非数值一般返回true

Number.isNaN(NaN); // true
Number.isNaN(20) ; // false

五、字符串扩展

重点:标签模板

标签模板

String.raw:避免转义

console.log(`Hi\n${2+3}!`);  //Hi
                             //5!
console.log(String.raw`Hi\n${2+3}!`); //Hi5!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值