1.var 可声明前置,let不可。
var a
a = 3
var a = 4
a = 3
let a //报错
2.let不可重复声明(var 可以)
let a = 1
let 2 = 2 //报错
3.存在块级作用域
for (let i = 0; i < 4; i++){
console.log(i) // 0 1 2 3 只能在这个花括号内,外面作用域是没有i的。
}
console.log(i) //报错:i is not defined
4.const 和let一样不可重复声明,不可声明前置及存在块级作用域。
const a = 5
a = 3 //报错
const obj = {a:2}
obj.a = 3 //没问题。因为const指向的是一个对象,对象不变就可以,这里变的是对象里面的a。
obj = {a: 3} //报错。因为把obj对象重新赋值了。
数组的解构
1.数组解构
这样可以
let [a, b ,c] = [1, 2, 3]
console.log(a,b,c) //1 2 3
这样也可
let [a, [b], c] = [1, [2], 3]
console.log([a, [b], c]) // Array(3)0: 21: [3]2: 4length: 3__proto__: Array(0)
a //2
b //3
c //4
这样报错咯
let [a] = 1 //报错
2.默认值
let [a, b=1] = [2]
a // 2
b // 1
这个a下标为0,后面的2给a,b没有(undefined)就用b默认的,所以是1.有就用设置的,没有设置就用默认的。
let [a=1, b=2] = [3, 4]
a // 3
b // 4
设置了就用设置的
let [a=1, b=2] = [undefined, null]
a // 1
b // null
a没有设置,所以用默认的1
b其实是设置了,只不过是null。
let [a=1, b=a] = [3]
a // 3
b // 3
3.对象的解构赋值
前置知识
let p = [name, age] //等同于下面的写法(ES6)
let p1 = {name: name, age: age}
对象解构范例
let {name: name ,age: age} = {name: 'Tom', age: 18} //等于下面的
let name
let age
({name: name, age: age} = {name: 'Tom', age: 18})
4.对象也有默认值,和上面的意思相同。
let {x, y=5} = {x: 1} //y是undefined,所以使用默认的y=5
x //1
y //5
5.函数解构
function sum([x, y] = [1, 2]){
return x + y
}
sum()//3
sum([2])//NaN
sum([2, 3])//5(俩个都赋值,相加得5)
1.function sum({x, y}={x:0, y:0}, {a=2, b=3}){
return [x+a, y+b]
}
sum({x:4, y:5}, {a:6}) //(2) [10, 8]
为什么是[10,8]
2.function sum({x, y}={x:0, y:0}, {a=2, b=3}){
return [x+a, y+b]
}
sum({x:4, y:5}, {a:6, b:7})
(2) [10, 12]
这个需要注意一下
function sum([x=1, y=2]){
return x+y
}
sum() //报错
sum([])//3 有[]里面,没有赋值所以用默认的
想不报错这样写,要给xy赋值
function sum([x, y] = [1, 2]){
return x + y
}
sum() //3(ES6)
6.作用
let [x, y] = [1, 2];(这个分好要写,不然浏览器会把它和下一句连一起。报错)
[x, y] = [y, x] //赋的值反过来了
x //2
y // 1
function ajax({url, type='GET'}){
}
ajax({url: 'http://localhost:3000/getData'})
ajax的url是必须要填的,其他不赋值可以使用默认。