IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6:对象增强写法&解构&let/const -> 正文阅读

[JavaScript知识库]ES6:对象增强写法&解构&let/const

对象的增强写法

在定义对象的属性和方法时,有了更方便的简便写法

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); // fzb
console.log(info.age); // 21
info.say(); // fzb say~
info.eat(); // fzb eat~
console.log(info[address]); // changsh

解构

数组解构

数组解构

var names = ["fzb", "gj", "sal"];

// 数组解构
var [name1, name2, name3] = names;
console.log(name1); // fzb
console.log(name2); // gj
console.log(name3); // sal

解构面的元素

,进行占位

var names = ["fzb", "gj", "sal"];

// 只解构后面一个元素
var [, , name3] = names;
console.log(name3); // sal

解构默认值

var names = ["fzb", "gj", "sal"];

// 对解构不到的树设置一个默认值
var [name1, name2, name3, name4 = "zzw"] = names;
console.log(name1); // fzb
console.log(name2); // gj
console.log(name3); // sal
console.log(name4); // zzw

解构剩余的值

var names = ["fzb", "gj", "sal"];

// 解构部分元素,剩下的元素解构到一个数组内
var [name1, ...name2] = names;
console.log(name1); // fzb
console.log(name2); // [ 'gj', 'sal' ]

对象解构

对象解构

var info = {
  name: "fzb",
  age: 21,
  address: "changsha",
};

// 对象的解构,与解构顺序无关
var { address, name, age } = info;
console.log(address); // changsha
console.log(age); // 21
console.log(name); // fzb

重命名

不想使用对象内的key作为变量名,可以进行重命名

var info = {
  name: "fzb",
  age: 21,
  address: "changsha",
};

// 重命名
var { address: d, name: n, age: a } = info;
console.log(d); // changsha
console.log(n); // 21
console.log(a); // fzb

解构默认值

var info = {
  name: "fzb",
  age: 21,
};

// 解构默认值
var { name, age, address = "china" } = info;
console.log(age); // 21
console.log(name); // fzb
console.log(address); // china

let/const

let/const的基本使用及注意事项

let/const用来申明变量

const name = "fzb";
// 不可二次赋值,报错:TypeError: Assignment to constant variable.
// name = "gj";
console.log(name); // fzb

let age = 21;
age = age + 1;
console.log(age); // 22

// 注意事项一:用const声明的是一个对象类型,那么只要只要变量指向的指针地址不变就行,是可以就该对象内部值的
const info = {
  age: 21,
};
// info = {}; // 这样是一定会报错的,改变了info的指向
info.age += 10;
console.log(info); // { age: 31 }

// 注意事项二:let/const重复声明对象是不可以的,但var可以

var address = "china";
var address = "changsha";
console.log(address); // changsha

let score = 70;
// let score = 100; // SyntaxError: Identifier 'score' has already been declared
console.log(score); // 70

let number = 1;
// let number = 2; // SyntaxError: Identifier 'number' has already been declared
console.log(number); // 1

let/const与作用域提升

var是存在作用域提升的,而let和const没有作用域提升

// 对于 var 关键字声明
console.log(name); // undefined
var name = "fzb";

// 对于 const 关键字声明
// console.log(age);
//报错: ReferenceError: Cannot access 'age' before initialization
const age = 21;
console.log(age); // 21

// 对于 let 关键字声明
// console.log(height);
//报错: ReferenceError: Cannot access 'height' before initialization
let height = 188;
console.log(height); // 188

let/const和全局对象window的关系

对于var在全局声明的变量,会放到window上面,一个改变另一个也改变

var age = 21;
console.log(window.age); // 21
window.age++;
console.log(age); //22

对于const在全局声明的变量,不会放到window

const age = 21;
console.log(window.age); // undefind

对于let在全局声明的变量,不会放到window

let age = 21;
console.log(window.age); // undefind

在旧版的ECMAScript标准上,GO对象就是window对象var全局定义的变量就会出现在window上,并且一起改变。

在新版的ECMAScript标准上,已经不存在GO,VO,AO对象的说法,改成了变量环境(VE)和变量环境记录(VER),正是因为新的声明关键字的出现。

结合上方的例子,也就是说:现在声明的变量存储的地点不再是GO(window),但是var声明的变量在新的存储地点存在一份,在window上还是存在一份,并且相互影响,而letconst声明的对象全在新的存储地点,在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); // fzb
// console.log(age); // Uncaught ReferenceError: age is not defined
// console.log(height); // Uncaught ReferenceError: height is not defined
console.log(sum(1, 2)); // 3
// console.log(new Person()); //Uncaught ReferenceError: Person is not defined

总结:let/const和var有何不同

  • let/const不允许重复定义相同名称的变量,而var可以
  • let/const不存在变量提升,而var存在
  • let/const定义的变量不会再window上增加一份,而var声明的变量会
  • let/const存在块级作用域的概念,而var不存在
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 14:34:58  更:2021-10-02 14:35:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:54:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码