前端面试:ES6 基础知识点 & ES6 相关面试题

[…document.querySelectorAll(‘div’)]

// [

,
,
]

{…{a: 1}, …{a: 2, b: 3}}

// {a: 2, b: 3}

[…[1], …[2, 3]]

// [1, 2, 3]

const arr = [1]

arr.push(…[2, 3])

// arr:[1, 2, 3

默认参数:

function log(x, y = ‘World’) {

console.log(x, y)

}

log(‘Hello’)

// Hello World

log(‘Hello’, undefined)

// Hello World

log(‘Hello’, ‘China’)

// Hello China

log(undefined, ‘China’)

// undefined China

log(, ‘China’)

// 报错 SyntaxError

log(‘Hello’, ‘’)

// Hello

log(‘Hello’, null)

// Hello null

参数不传递或是传递undefined会让参数等于默认值,如果参数不是最后一个,不传递参数就会报错。

传递null不会让函数参数等于默认值。

// 获取函数所有的参数,rest 为数组

function func1(…rest){ /* … */}

// 获取函数第一个参数外其他的参数,rest 为数组

function func1(val, …rest){ /* … */}

模板字符串:

var str = abcdefgh;

console.log(str);

let name = “小明”;

function a() {

return “ming”;

}

console.log(我的名字叫做${name},年龄${17+2}岁,性别${'男'},游戏ID:${a()});

函数的默认参数:

function A(a,b=1){

console.log(a+b);

}

A(1); //2

A(2+3); //5

箭头函数:

//省略写法

var people = name => ‘hello’ + name;

var getFullName = (firstName, lastName) => {

var fullName = firstName + lastName;

return fullName;

}

对象的扩展:

var foo = ‘bar’;

var baz = {foo};

//等同于 var baz = {foo: foo};

var o = {

method() {

return “Hello!”;

}

};

// 等同于

var o = {

method: function() {

return “Hello!”;

}

};

set数据结构

  • size 数据的长度

  • add() 添加某个值,返回 Set 结构本身。

  • delete() 删除某个值,返回一个布尔值,表示删除是否成功。

  • has() 查找某条数据,返回一个布尔值。

  • clear() 清除所有成员,没有返回值。

Promise对象

它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败。

var promise = new Promise((resolve, reject) => {

var success = true;

if (success) {

resolve(‘成功’);

} else {

reject(‘失败’);

}

}).then(

(data) => { console.log(data)},

(data) => { console.log(data)}

)

async / await

async其实就是对Generator的封装,只不过async可以自动执行next()。

async function read () {

let data1= await new Promise(resolve => {

resolve(‘100’)

})

let data2 = await 200

return 300

}

(1)async 返回值

async 默认返回一个 Promise,如果 return 不是一个 Promise 对象,就会被转为立即 resolve 的 Promise,可以在 then 函数中获取返回值。

async 必须等到里面所有的 await 执行完,async 才开始 return,返回的 Promise状态才改变。除非遇到 return 和错误。

async function fn () {

await 100

await 200

return 300

}

fn().then(res => {

console.log9(res) // 300

})

(2)await

await 也是默认返回 Promise 对象,如果 await 后面不是一个 Promise 对象,就会转为立即 resolve 的 Promise

如果一个 await 后面的 Promise 如果为 reject,那么整个 async 都会中断执行,后面的awiat都不会执行,并且抛出错误,可以在 async的catch中捕获错误

async function f() {

await Promise.reject(‘error’);

await Promise.resolve(‘hello world’); // 不会执行

}

f().then(res =>{

}).catch(err=>{

console.log(err) // error

})

如果希望一个await失败,后面的继续执行,可以使用try…catch或者在await后面的Promise跟一个catch方法:

// try…catch

async function f() {

try {

await Promise.reject(‘出错了’);

} catch(e) {

}

return await Promise.resolve(‘hello world’);

}

f()

.then(v => console.log(v)) // hello world

// catch

async function f() {

await Promise.reject(‘出错了’)

.catch(e => console.log(e)); // 出错了

return await Promise.resolve(‘hello world’);

}

f()

.then(v => console.log(v)) // hello world

箭头函数

箭头函数在写法上对es5做了一些修整,代码看起来更显得简洁

  • 如果只有一个参数,圆括号 “()” 可以省略

  • 函数体如果只有一句 return 语句,花括号也可以省略

// 定义一个箭头函数

let a = (arg)=>{ // 这里=>符号就相当于function关键字

return arg+=1

}

// 也可以简写为

let a = arg => arg+=1

箭头函数也对 this 的指向做了修整

es6 之前的函数的 this 指向调用函数时所在的对象,而箭头函数的 this 指向函数定义时所在的对象

// 普通函数

var obj = {

say: function () {

setTimeout(function() {

console.log(this)

});

}

}

// 箭头函数

var obj = {

say: function () {

setTimeout(() => {

console.log(this)

});

}

}

obj.say(); // obj

模板字符串

模板字符串是为了解决使用+号拼接字符串的不便利而出现的。它的功能非常强大,但是我们大多数时候使用它则非常简单。

// es6

const a = 20;

const b = 30;

const string = ${a}+${b}=${a+b};

// es5

var a = 20;

var b = 30;

var string = a + “+” + b + “=” + (a + b);

使用 `` 将整个字符串包裹起来,而在其中使用 ${} 来包裹一个变量或者一个表达式。

class

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

先看如何定义一个class类:

class User {

constructor(name) { // 构造器,相当于es5中的构造函数

this.name = name // 实例属性

}

showName(){ // 定义类的方法,不能使用function关键字,不能使用逗号分隔

console.log(this.name)

}

}

var foo = new User(‘foo’)

(1)constructor

es6 中 class 类专用的构造器,相当于之前定义的构造函数,每个类都必须有constructor,如果没有则自动添加一个空的 constructor 构造器。

创建实例的时候自动执行 constructor 函数

constructor 中的 this 指向实例,并且默认返回 this(实例)

(2)class 类的 prototype

其实 class 的基本类型就是函数(typeof User = “function”),既然是函数,那么就会有 prototype 属性。

类的所有方法都是定义在 prototype上

class User {

constructor() {

// …

}

toString() {

// …

}

toValue() {

// …

}

}

User.toValue() // err User.toValue is not a function

User.prototype.toValue() // 可以调用toValue方法

// 等同于

User.prototype = {

constructor() {},

toString() {},

toValue() {},

};

(3)类的实例

  • 类的实例只能通过 new 来创建

  • 除了静态方法,定义在类上的所有的方法都会被实例继承

  • 除非定义在类的 this 对象上才是实例属性,否则都是定义在类的原型(prototype)上

//定义类

class Point {

constructor(x, y) {

this.x = x;

this.y = y;

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
rototype)上

//定义类

class Point {

constructor(x, y) {

this.x = x;

this.y = y;

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-IARbHMZN-1715907127779)]

[外链图片转存中…(img-Zr5bImMc-1715907127779)]

[外链图片转存中…(img-l938WXH9-1715907127780)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值