- echarts1
- es615
- git12
- engine1
- javascript21
- IOC1
- DI1
- nestjs1
- Nestjs1
- PostgreSQL3
- eventsource2
- python5
- mysql12
- docker2
- design9
- 设计模式24
- frontend24
- engineering8
- Node.js1
- MySQL1
- MongoDB1
- github2
- graphics10
- javascript 数据类型2
- URL Scheme1
- webkitSpeechRecognition1
- linux14
- navicat1
- redis2
- nginx8
- react11
- react query1
- Redux1
- rxjava1
- android3
- vite3
- vue46
- interview234
- NodeJS15
- JavaScript36
- algorithm19
- React34
- applet9
- css21
- http15
- typescript13
- vue37
- webpack10
对象新增了哪些扩展?

一、参数
ES6允许为函数的参数设置默认值
function log(x, y = 'World') {
console.log(x, y);
}
console.log('Hello'); // Hello World
console.log('Hello', 'China'); // Hello China
console.log('Hello', ''); // Hello
你是怎么理解 ES6 中 Module 的?使用场景?

一、介绍
模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。
ES6 中数组新增了哪些扩展?

一、扩展运算符的应用
ES6 通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
你是怎么理解 ES6 新增 Set、Map 两种数据结构的?

如果要用一句来描述,我们可以说
Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构
你是怎么理解 ES6 中 Proxy 的?使用场景?

一、介绍
定义: 用于定义基本操作的自定义行为
本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming)
你是怎么理解 ES6 中 Promise 的?使用场景?

一、介绍
Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大
说说 var、let、const 之间的区别

一、var
在 ES5 中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量
你是怎么理解 ES6 中 Decorator 的?使用场景?

一、介绍
Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式
简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。
你是怎么理解 ES6 中 Generator 的?使用场景?

一、介绍
Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同
回顾下上文提到的解决异步的手段:
对象新增了哪些扩展?

一、属性的简写
ES6 中,当对象键名与对应值名相等的时候,可以进行简写
const baz = { foo: foo };
// 等同于
const baz = { foo };
跨域
跨域的原因 —— 浏览器的同源策略
同源策略是浏览器一个重要的安全策略,它用于限制一个 origin 的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介
同源的定义是两个 URL 的 协议、域名(子域名 + 主域名)、端口号 都相同,否则就会出现跨域
es6 知识点
ECMAScript 6 (简称 ES6) 是 JavaScript 语言的下一代标准
ECMAScript 的提案流程
Stage 0 - Strawman(展示阶段)Stage 1 - Proposal(征求意见阶段)Stage 2 - Draft(草案阶段)Stage 3 - Candidate(候选人阶段)Stage 4 - Finished(定案阶段)
什么是模块化?
百度百科中的解释: 模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。
在编程中 模块化是将一个复杂的应用程序,按照一定的规则拆分成若干个文件(代码块),并进行组合。文件内部的数据与实现都是私有的,只是对外暴露一些接口(方法、变量)与其他模块进行通信
模块化的好处
- 避免命名空间的冲突
- 提高代码的复用性
- 提高维护性
- 更好的分离,实现按需加载
new 运算符
new 运算符原理
- 创建一个全新的对象
- 为新创建的对象添加
__proto__属模拟实现 new 运算符性并指向构造函数的原型对象 - 将新创建的对象作为函数调用的 this
- 如果构造函数没有返回对象类型,则返回新创建的对象
模拟实现 new 运算符
function myNew() {
// 获取构造函数
const Constructor = [].shift.call(arguments);
// 创建空对象并设置原型
const obj = Object.create(Constructor.prototype);
// 绑定 this 并执行构造函数
const result = Constructor.apply(obj, arguments);
// 返回构造函数显示返回的值或新对象
const type = typeof result;
return result && (type === 'object' || type === 'function') ? result : obj;
}