ES6新特性有哪些--前端面试题目之ES6新特性

本文详细介绍了ES6的多项新特性,包括块级作用域(let, const)、类语法、Symbol、解构赋值、函数参数默认值、数组新增API、Promise、模块化(import, export)、Set和Map数据结构、Generator以及箭头函数。这些特性极大地丰富了JavaScript的语法,提升了开发效率。" 118258594,10542025,使用CSS实现三列自适应高度的HTML布局,"['前端开发', 'CSS', 'HTML布局', '响应式设计', '网页设计']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6的新特性有哪些

1.新增块级作用域(let,const)

在ES6之前只有全局作用域和局部作用域,ES6新增了块级作用域let和const,下面将简单介绍var、let和const的特点以及区别。

块级作用域:只能在声明的区域(代码块)中使用,不能在声明的区域的外部使用,否则报(xxx is not defined)。

var:使用var声明的变量,其作用域为该变量所在的函数内,且存在变量提升现象(变量提升:可以先使用再声明),不会受到块级作用域的影响

let:ES6新增的块级作用域
1:使用let声明的变量具有块级作用域:,只能在当前声明的代码块中使用,必须要先声明再使用
2:具有暂时性死区特性。

在代码块内,使用let和const命令声明变量之前,该变量都是不可用的,语法上被称为暂时性死区。

const:ES6中新增的常量(常量:值(内存地址)不可更改的量)。特点如下:
3.1:具有块级作用域的特点,只能在当前声明的代码块中使用,必须要先声明再使用。
3.2:声明常量时必须赋值,如果不赋值报错:Missing initializer in const declaration(在const声明中未初始化)。
  3.3:const声明的常量不可更改。
  3.4:使用const声明的常量如果是基本数据类型(比如:数字、字符串),一旦赋值,值不可以更改;如果是引用数据类型(数组,对象),不能重新赋值,但是可以更改数据结构内部的值(比如修改对象中的属性)。

2.新增了定义类语法糖(class)

1.class是ES6提供的一个语法糖,本质是一个函数。
2.在class中声明方法,不需要function关键字。
3.class存在暂时型死区,在声明之前不能调用。
4.class默认有constructor、static方法。(constructor 方法是类的默认方法,创建类的实例化对象时被调用。)

<script>
        class Start { 
            constructor(){
                console.log("constructor已执行!");
            }
        }
        new Start();   // 输出:constructor已执行!
    </script>

5.class构造时必须使用new关键字。

3.新增了一种数据结构(symbol)

symbol–可以说是独一无二

symbol是一个原始数据类型,而不是一个对象,所以不能用new,用了就报错喽

symbol的值可以转化为字符串、布尔值

symbol的值不能和其他类型的值进行运算

symbol的参数只是当前symbol值的描述,相同参数的值是不相等的

每一个symbol值都是独一无二的奥,正是因为这样,我们才能把他作为对象属性名

4.新增了解构赋值

解构:分解数据结构。
赋值:为变量赋值。
解构赋值:从数组或者对象中提取值,按照对应的位置,对变量赋值(在数组解构中,只要解构的目标可以遍历,就可以实现解构赋值)。

例如:(数组解构)

let [a, b, c] = [1, 2, 3]; // a = 1 // b = 2 // c = 3

具体可以看菜鸟教程

5.新增了函数参数的默认值

在ES6之前,不能直接将函数的参数指定默认值,只能采用变通的方法

所以呢,ES6就允许给参数的参数设置默认值

例如:

function aaa(x,y=‘Hello’){

}

6.给数组增加了一些API

例如:(具体可以点击查看

1.Array.of()

用于将一组值,转换为数组

Array
let arr0 = new Array(4);
console.log(arr0);// [empty,empty,empty,empty]
1
2
Array.of()
let arr2 = Array.of(4)
console.log(arr2); //[4]

2.Array.form()

将两类对象(arguments,元素集合,自定义类数组[‘0’:100,length:1])转为真正的数组

3.find()

用于找出第一个符合条件的数组成员,并且返回该数组元素

如果没有满足条件的数组元素该方法返回undefined

4.findIndex()

用于找出第一个符合条件的数组成员的索引值,并且返回该数组元素的索引值

如果没有满足条件的数组元素该方法返回-1

5.fill()

给数组指定的索引,以指定值进行填充

//—第一个参数是填充的值

//—第二个参数是起始索引 默认值是0

//—第三个参数是结束的索引(不包含) 默认值是数组length

6.copyWithin()

在当前数组内部,将指定位置的成员复制到其他位置,然后返回当前数组

// —第二个参数为起始索引

// —第三个参数为结束索引**(不包含)**,将对应的数组元素赋值给第一个参数设置的开头的索引,依次取替换原索引上的值

7.includes()

判断数组是否包含指定值—是全等判断

相当于Object.is()

//—第一个值是包含的指定值

//—第二个值是指定值的索引

7.对象和数组新增了扩展运算符

具体可点击

1. 拓展运算符 …

let arr2 = […arr]

就这样,我们就可以直接拷贝到arr的值

拓展运算符的作用就是将数组分割,并将个项作为分离的参数传给函数

2.Array 构造函数新增方法
1.Array.from()将类数组对象转换为数组对象

2.Array.of(a,b,c)相当于创建了一个新数组
这里要注意的是,Array.of(3)!=new Array(3)
前者表示的是数值为3,后者表示数组长度为3

3.Array.isArray(arr) 判断arr是否是一个数组,返回布尔值

3.数组新增对象的方法

1.find() 返回数组中第一个满足条件的元素
2.findIndex()返回数组中第一个满足条件的元素的索引

3.entries()帮助数组遍历每一个key值和value值
4.keys() 帮助数组遍历所有key值

5.includes()数组中存在某个值,返回布尔值,和indexOf用法相同

6.filter() 过滤数组单元,将满足条件的元素过滤
7.map() 对数组进行遍历,将计算后的值返回数组

8.some()只要有一个满足条件,返回ture
9.every()只要有一个不满足条件,则返回false
10.reduce((x,y)=>x+y)做累加

8.Promise

1.解决回调地狱的问题

(什么是回调地狱)

在回调函数里边,嵌套回调函数,就是回调地狱、

这次请求需要上一次请求的结果

promise优化回调地狱 & async await 优化回调地狱

promise优化回调地狱 原理就是axios.get() 它相当于let p=axios.get() 也是一个promise对象,promise对象都有.then方法。

async await优化回调地狱的原理是async修饰后的函数 它的返回值就是await axios.get() 所以这里可以省略.then 用一个变量直接接收await axios.get()的返回值。再在函数外面接收这个函数的返回值。
2.自身有all,reject,resolve,race方法

3.原型上有then,catch

4.异步操作队列化

5.三种状态:

Pending(进行中,初始状态,既不是成功,也不是失败状态。)、Resolved(已完成,又称 Fulfilled)、Rejected(已失败)

这三种状态的变化途径只有2种:
异步操作从 未完成 pending => 已完成 resolved
异步操作从 未完成 pending => 失败 rejected
状态一旦改变,就无法再次改变状态,这也是它名字 promise-承诺 的由来,一个promise对象只能改变一次

async await

同步代码做异步操作,两者必须搭配使用

async表明函数内部有异步操作,调用函数返回promise

await是组成async的表达式,结果是取决于它等待的内容,如果是promise那就是promise的结果,如果是普通函数,就进行链式调用

await后的promise如果是reject,那么整个async函数就会中断,后面的代码就不执行了

9.新增了模块化(import,export)

10.新增了set和map数据解构

set就是唯一性,不重复

map:key的类型不受限制

11.新增了generator

可以让函数暂停

具体可以看这里

Generator函数(生成器)是ES6提供的一种异步编程解决方案,形式上也是一个普通函数,但有几个显著的特征:

function关键字与函数名之间有一个星号 “*” (推荐紧挨着function关键字)
函数体内使用 yield 表达式,定义不同的内部状态 (可以有多个yield)
直接调用 Generator函数并不会执行,也不会返回运行结果,而是返回一个遍历器对象(Iterator Object)
依次调用遍历器对象的next方法,遍历 Generator函数内部的每一个状态

12.新增了箭头函数

不能作为构造函数使用,不能用new

箭头函数没有原型

箭头函数没有arguments

箭头函数不能用call,apply,bind去改变this的执行

this指向的是外层第一个函数的this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值