if (true) {
function f() {}
}
// 不报错
- es6的块级作用域声明函数只在使用大括号的情况下成立
// 不报错
‘use strict’;
if (true) {
function f() {}
}
// 报错
‘use strict’;
if (true)
function f() {}
扩展运算符:
将一个数组转化为逗号分隔的参数序列
console.log(…[1, 2, 3])
// 1 2 3
console.log(1, …[2, 3, 4], 5)
// 1 2 3 4 5
[…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 // 实例属性
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
紧跟潮流
大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。
这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ZOc-1712944033191)]
[外链图片转存中…(img-NTy5Onm1-1712944033191)]
[外链图片转存中…(img-CGYkNadm-1712944033191)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-T5CAIqeF-1712944033191)]
紧跟潮流
大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。
这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-anpczj4r-1712944033192)]