JavaScript高级第五天(ES6笔记完结)(一)

简介: JavaScript高级第五天(ES6笔记完结)

今日目标

  • 能够说出使用let关键字声明变量的特点
  • 能够使用解构赋值从数组中提取值
  • 能够说出箭头函数拥有的特性
  • 能够使用剩余参数接收剩余的函数参数
  • 能够使用拓展运算符拆分数组
  • 能够说出模板字符串拥有的特性


一、ES6 简介

1、什么是 ES6

ES 的全称是 ECMAScript,它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范

c67b7355ce574ce68fd7952c0da21e48.png

ES6 实际上是一个泛指,泛指 ES2015 及后续的版本


2、为什么使用 ES6

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方

例如:

  • 变量提升特性增加了程序运行时的不可预测性
  • 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码


二、ES6 的新增语法

1、let

ES6 中新增的用于声明变量的关键字

特点:

  • let 声明的变量只在所处于的块级有效

语法:

if (true) {
  let a = 10;
}
console.log(a) // a is not defined


  • 注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性
  • 不存在变量提升
    let 声明的变量必须先声明,才能使用


代码:

console.log(a); // Cannot access 'a' before initialization
let a = 20;


暂时性死区

代码:

var tmp = 123; 
if (true) {
  tmp = 'abc';
  let tmp; 
}


经典面试题:

efe68e97a6d840778e76a48d886255a5.png


经典面试题图解:此题的关键点在于变量i是全局的,函数执行时输出的都是全局作用域下的 i 值

2376ad0b8dec468782c6c9279310d25f.png经典面试题图解:此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的, 函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的 i 值


2、const

作用:声明常量,常量就是值(内存地址)不能变化的量

特点:

  • 具有块级作用域

代码:

if (true) {
  const a = 10;
}
console.log(a) // a is not defined


声明常量时必须赋值

代码:

const PI; // Missing initializer in const declaration


常量赋值后,值不能修改

代码:

const PI = 3.14;
PI = 100; // Assignment to constant variable


const arr = [100, 200];
arr[0] = 10;
arr[1] = 20;
console.log(arr);  // [10, 20]
arr = ["abc", "xyz"];  // Assignment to constant variable.


补充:全局 变量(let) 和常量(const) 不会变为 window 对象的属性

let、const、var 的区别

  • 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象
  • 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升
  • 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值

c7f0673b692b477db1ffdc96c772c99d.png


3、解构赋值

ES6 中允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构

  • 数组解构
    代码:
let [a, b, c] = [1, 2, 3];
console.log(a);
console.log(b);
console.log(c);


如果解构不成功,变量的值为undefined

代码:

let [a, b, c, d, e] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(d); // undefined
console.log(e); // undefined


对象解构

代码:

let person = { name: 'zhangsan', age: 20 };
let { name, age } = person;
console.log(name); // 'zhangsan'
console.log(age); // 20


对象结构重命名

代码:

let {name: myName, age: myAge} = person; // myName myAge 属于别名
console.log(myName); // 'zhangsan'
console.log(myAge); // 20


4、箭头函数

ES6中新增的定义函数的方式

语法:

() => {}
const fn = () => {}


函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号

代码:

function sum(num1, num2) {
  return num1 + num2;
}
const sum = (num1, num2) => num1 + num2;


如果形参只有一个,可以省略小括号

代码:

function fn (v) {
  return v;
}
const fn = v => v;


箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文 this

代码:

const obj = { name: '张三'}
function fn () {
  console.log(this);
  return () => {
    console.log(this)
  }
}
const resFn = fn.call(obj);
resFn();


面试题:

var age = 100;
var obj = {
  age: 20,
  say: () => {
    alert(this.age)
  }
}
obj.say();


5、剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组

代码:

function sum (first, ...args) {
  console.log(first); // 10 
  console.log(args); // [20, 30]
}
sum(10, 20, 30)


剩余参数和解构配合使用

代码:

let students = ['wangwu', 'zhangsan', 'lisi'];
let [s1, ...s2] = students;
console.log(s1); // 'wangwu'
console.log(s2); // ['zhangsan', 'lisi']






目录
相关文章
|
30天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
37 0
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
2月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
12天前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
29 2
|
19天前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
15 3
|
30天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
26 4
|
2月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
1月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
22 1
|
14天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
31 0
|
1月前
|
前端开发 JavaScript 小程序
JavaScript的ES6中Promise的使用以及个人理解
JavaScript的ES6中Promise的使用以及个人理解
18 1