对象的增强写法
在定义对象的属性和方法时,有了更方便的简便写法
var name = "fzb";
var age = 21;
var address = "address";
var info = {
name: name,
age,
say: function () {
console.log(this.name + " say~");
},
eat() {
console.log(this.name + " eat~");
},
[address]: "changsha",
};
console.log(info.name);
console.log(info.age);
info.say();
info.eat();
console.log(info[address]);
解构
数组解构
数组解构
var names = ["fzb", "gj", "sal"];
var [name1, name2, name3] = names;
console.log(name1);
console.log(name2);
console.log(name3);
解构面的元素
用 ,进行占位
var names = ["fzb", "gj", "sal"];
var [, , name3] = names;
console.log(name3);
解构默认值
var names = ["fzb", "gj", "sal"];
var [name1, name2, name3, name4 = "zzw"] = names;
console.log(name1);
console.log(name2);
console.log(name3);
console.log(name4);
解构剩余的值
var names = ["fzb", "gj", "sal"];
var [name1, ...name2] = names;
console.log(name1);
console.log(name2);
对象解构
对象解构
var info = {
name: "fzb",
age: 21,
address: "changsha",
};
var { address, name, age } = info;
console.log(address);
console.log(age);
console.log(name);
重命名
不想使用对象内的key作为变量名,可以进行重命名
var info = {
name: "fzb",
age: 21,
address: "changsha",
};
var { address: d, name: n, age: a } = info;
console.log(d);
console.log(n);
console.log(a);
解构默认值
var info = {
name: "fzb",
age: 21,
};
var { name, age, address = "china" } = info;
console.log(age);
console.log(name);
console.log(address);
let/const
let/const的基本使用及注意事项
let/const用来申明变量
const name = "fzb";
console.log(name);
let age = 21;
age = age + 1;
console.log(age);
const info = {
age: 21,
};
info.age += 10;
console.log(info);
var address = "china";
var address = "changsha";
console.log(address);
let score = 70;
console.log(score);
let number = 1;
console.log(number);
let/const与作用域提升
var是存在作用域提升的,而let和const没有作用域提升
console.log(name);
var name = "fzb";
const age = 21;
console.log(age);
let height = 188;
console.log(height);
let/const和全局对象window的关系
对于var在全局声明的变量,会放到window上面,一个改变另一个也改变
var age = 21;
console.log(window.age);
window.age++;
console.log(age);
对于const在全局声明的变量,不会放到window上
const age = 21;
console.log(window.age);
对于let在全局声明的变量,不会放到window上
let age = 21;
console.log(window.age);
在旧版的ECMAScript标准上,GO对象就是window对象,var全局定义的变量就会出现在window上,并且一起改变。
在新版的ECMAScript标准上,已经不存在GO,VO,AO对象的说法,改成了变量环境(VE)和变量环境记录(VER),正是因为新的声明关键字的出现。
结合上方的例子,也就是说:现在声明的变量存储的地点不再是GO(window),但是var声明的变量在新的存储地点存在一份,在window上还是存在一份,并且相互影响,而let和const声明的对象全在新的存储地点,在window上不存在了。现在的变量存储在varable_的地方,varableMap的存储方式,这是一种hash表。
块级作用域
在ES6以前,具有作用域的地方只有两个全局作用域和函数作用域。
在ES6时出现了块级作用域的概念
let/const/function(有点特殊)/class具有块级作用域的概念
if/switch/for具有块级作用域
{
var name = "fzb";
const age = 21;
let height = 188;
function sum(n1, n2) {
return n1 + n2;
}
class Person {}
}
console.log(name);
console.log(sum(1, 2));
总结:let/const和var有何不同
- let/const不允许重复定义相同名称的变量,而var可以
- let/const不存在变量提升,而var存在
- let/const定义的变量不会再window上增加一份,而var声明的变量会
- let/const存在块级作用域的概念,而var不存在
|