对象的增强写法
在定义对象的属性和方法时,有了更方便的简便写法
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不存在
|