ES6

在学习node.js的过程中发现有很多的ES6语法。感觉在进一步学习之前还是得先把ES6系统性的学习一下,巩固一下基础。这样后续的学习应该会效率更高。

兼容性问题(学习转化,并观察差别)

ES6可以通过BABEL转化为ES5语法来避免兼容性问题

1.安装Live Server插件

作用:每次ctrl+s后页面就会自动刷新。会使用http协议打开,避免一些功能禁用。

2.常量

与变量不同,常量是只读不可写的(在C系语言中,定义时加个const)。
在ES6中,可以直接用const定义一个常量

const index = 123;

相比于ES5中声明常量需要将writable设定为false,ES6明显方便很多。

与var的区别
1.必须要有初始值。
2.不可重名覆盖。
3.通过var声明的是属于顶层对象的(浏览器中就是window)。通过const声明的不属于顶层对象。这意味着使用const后不会污染全局变量。
4.const声明的不存在变量提升,必须先定义后调用(感觉提升了安全性?)。
5.作用域也不同。const是块级作用域的(和let一样,ES6中建议变量都用let)。
(更加严谨)

const定义的常量其实也可以改变
const定义的对象内的属性、数组内的元素是可以改变的。
原因:
他们是引用数据类型(要联系到存储方式来解释这种情况)
变量的值存储在栈内存中。引用数据类型的栈内存存储的是地址,地址指向的堆内存才是属性或元素。
const定义的本质是栈内存的内容不能改变
在这里插入图片描述

那么有没有办法解决这个情况呢?
可以使用Object.freeze()方法来让内容不能改变。

Object.freeze(arr);
arr[0]=123456;

缺陷:但是只能冻结第一层,如果属性也是个对象或数组那么还是冻结不了,这个时候就得自己写个递归
此处需要用到的函数:Object.keys(),他会返回一个当前对象属性组成的数组。

function deepFreeze(obj){
     Object.freeze(obj);//最外层冻结
     Object.keys(obj).forEach((key)=>{
             if(typeof  obj[key] === 'object') deepFreeze(obj[key]);
             //此处注意forEach的传入值,如果是对象的话,那么是个属性,然后用括号法表示他。
             //如果是个数组那么就是个下标,刚好也是同格式表示。
             //括号法在这种情况下非常便捷。
})
};

箭头函数

箭头函数内部与其外部的this是保持一致的
1.方法体中如果只有一行代码,会等效为return

const a = (a,b)=> a+b;

2.只有一个参数时,小括号也可以不写

const b = b => b+1;

3.对象内部的方法不要用箭头函数!!!
4.箭头函数没有arguments对象!!!
5.不能当做构造函数!!!
6.不能定义原型下的方法,因为this不会指向原型。

解构赋值

要点:等号左边和右边对应的结构要对应
是惰性的,如果有变不为空出现了赋值,左边相应的操作(比如说是一个函数、或者说有一个默认值)就不会执行。。

案例:
简化了步骤更加简洁。

//Object
const good = {
   name = A,
   id = 0001,
   price = 5
}
const {name,id,price} = good;
console.log(name,id,price);
//Array
const [a,b,c] = arr;
console.log(a,b,c);

有一个很神奇的事情是 ,{}中的所有内容都相当于是const定义的。

解构赋值还能作为参数,参数可以设默认值。

妙用:将值互换

let a = 0;
let b = 1;
[b,a] = [a,b];

JSON中

const json = '{"name":"a","id":"001"}'
const {name,id}= JSON.parse(json); 

还可以直接通过Ajax请求中获取数据(后期使用过补上案例)

模板字符串

使用反引号(键盘1左边的那个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值