1.CONST
声明常量 不可更改
不属于顶层对象
var str=1
window.str
const str
window.str//undefined
不存在变量提升
console.log(str)
var str='es6'不报错 undefined
console.log(str)
const str='es6'报错
//暂时性死区
if(){
console.log(str)
var str='es6'//大括号中报错
}
//块级作用域
大括号为块级作用域
if(){
const str='es6'
}
console.log(str)//报错
基本数据类型会存在栈内存(stack)
引用:堆内存(heap)栈内存中存的是引用地址 所以地址无变化数值是可以改变的
Object.freeze(引用类型) 不可改 不过只能冻结第一层
如果每一层都冻结要递归
function myFreeze(obj){
Object.freeze(obj);
Object.keys(obj).forEach(function(key)){
if(typeof obj[key]==='object'){
myFreeze(obj[key])
}}}
2箭头函数
const sum3=(x,y)=>{
return x+y;
}
const sum3=(x,y)=>x+y(只有一个参数小括号也可以不写)
箭头函数内没有this 指向上层作用域 没有就是window
箭头函数取不到 arguments
不能是用箭头函数作为构造函数
3模板字符串
``反引号
console.log(我要学习${this.name}
)变量用${}来取
4解构赋值
const course={
name:'es6',
price:'500'
}
const{name,price}=course
console.log(name,price)
const [a,b,c]=courseArr
重名问题:
const{
name:cname,//别名
price,
teacher:{
name,age
}}
console.log(cname,name)
用法
const sum=([a,b,c])=>{console.log(a+b+c)}
sum([1,2,3])
const foo=({name,age,sc='111'})=>{}解构设置默认值 传了按照传值走
函数返回值也可以结构 return
const {name,age}=foo();
JSON字符串
JSON.parse(a)
5ES6不能被所有浏览器识别怎么办(安装babel)
npm install --save-dev babel-preset-env babel-cli
-D=--save
配置文件:
.babelrc
6扩展运算符
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }
上述方法实际上等价于:
let bar = { a: 1, b: 2 };
let baz = Object.assign({}, bar); // { a: 1, b: 2 }
let obj1 = { a: 1, b: 2};
let obj2 = { ...obj1, b: '2-edited'};
console.log(obj1); // {a: 1, b: 2}
console.log(obj2); // {a: 1, b: "2-edited"}
function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
[...'hello']
// [ "h", "e", "l", "l", "o" ]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。