/*说明:这是一些随手记录的内容,暂未系统的排序和分级,后续可能会整理,也可能就是这样/*
1.对象的遍历
1.for in
for(let key in obj){
console.log(obj[key])
}
2.Object.keys()
2.扩展运算符(...)
1.哪些对象可以使用?
可迭代对象,包括数组、类数组对象(字符串、arguments对象、NodeList)、Set、Map
2.为什么?
扩展运算符默认调用的是对象的iterator接口,任何配置了iterator接口的对象都可以使用扩展运算符
3.什么是可迭代对象?
存在[Symbol.iterator]方法的对象,我们可以在可迭代对象本身或原型身上找到[Symbol.iterator]方法,该方法的出现为的是ES6语法中的 for of
3.模块化标准
模块化的优点或者说为什么模块化?
避免命名冲突;更好地分离;按需加载;更高复用性;高可维护性。
commonJS
- 起初是为了弥补JS语言模块化缺陷
- 语言层面的规范,主要应用于Node.js
- 分为引入、定义、标识符三个部分
- Moudle在任意模块中可直接使用,包含当前模块信息
- Require接收标识符,加载目标模块
- Exports与modules.exports都能导出模块数据
- 同步加载
AMD(Asynchromous Module Definition - 异步模块定义)
- 异步加载
- 可并行加载多个模块
- 加载完即执行,无法保证执行顺序
- 是RequireJS在推广过程中对模块定义的规范化产出
CMD
- 异步加载
- 依赖就近(按需加载)
- 加载完成后需调用执行
- 是SeaJS在推广过程中对模块定义的规范化产出
ES6
- 异步加载
- 输出值的引用
- 编译时输出
- 在代码静态解析阶段就会发生
ES6和commonJS的区别?
- common JS在运行时加载模块,ES6在编译时加载模块
- common JS输出的是值的复制(深拷贝),ES6输出的是值的引用
4.在bable将ES6语法转义为ES5时,会如何处理let和const?
1.let定义的变量是全局变量,则直接将let变成var
2.块级作用域中,会将let声明的关键字前加下划线生成新的关键字后再用var进行声明let a => var _a
3.循环体中闭包的情况,会将循环体转换为自执行函数
5.Map和Object的区别
1.键的取值类型:Map可以取任意值;Object只能是字符串或Symbol
2.插入顺序:Map会保持插入顺序;Object会按照自身规则排序
3.迭代:Map可迭代,可使用for-of及forEach;Object默认不可迭代,遍历需使用for-in、Object.keys()、Object.values()、Object.entries()等方法
4.原型:Map默认不会覆盖原型属性;Object可覆盖
5.操作:
Map | Object | |
---|---|---|
创建 | new关键字 | new、{} |
新增 | mapObj.set('a',1) | obj.a = 1 / obj[a] = 1 |
查询 | mapObj.get('a') | obj.a / obj[a] |
删除 | mapObj.delete('a') | delete obj.a / delete obj[a] |
长度 | mapObj.size() | Object.keys(obj).length |
6.函数柯里化
将原函数转化,转化后返回一个可以继续调用的函数,可以继续调用以达到继续传参的目的,传入的参数会被放入闭包中储存起来,等到真正运算时,再将之前传入的所有参数运算后返回最终结果
应用:参数复用*;提前返回(不同环境执行不同方法);延迟计算:记账,科学计算器等。
*参数复用:需要多次执行的函数中有部分参数是相同的,此时可以先传入相同参数,而后返回具有差异化参数的闭包函数,此时只在外部调用闭包函数传差异参数即可
7.promise的三种状态
1.初始态——pending
promise执行后的初始状态,在resolved或rejected之前会一直处于该状态,pending状态是promise中唯一可以进行转变的状态
2.成功态——resolved/fulfilled
promise执行resolved()后将状态从pending转变成resolved/fulfilled,不可逆
3.失败态——rejected
promise执行rejected()后将状态从pending转变成rejected,不可逆
8.git中merge和rebase的区别
两者都可以用来合并代码,区别在于,merge合并方式相当于把dev和master做合并后再推到master上去(暂不考虑冲突),rebase合并则是直接把dev基于的分支(基础分支)变为最新的master。
like this:
(个人理解,不对的话欢迎指正)
9.get和post的区别
get | post |
---|---|
向服务器获取数据 | 向服务器提交数据 |
参数放置在URL中 | 参数放置在request body |
参数长度限制在2k | 无限制 |
参数会被保留在浏览器历史中 | 不保留 |
参数只能采用URL编码 | 支持多种编码 |
浏览器回退时是无害的 | 浏览器回退会造成数据重复提交 |
请求会被浏览器主动缓存 | 不会 |
10.webpack的loader
名称 | 作用 |
---|---|
ts-loader | TS-->JS |
postcss-loader | 添加css中的前缀 |
less-loader/sass-loader | less/sass-->css,转换成js模块 |
css-loader | 解析css文件,合并为一段css代码 |
style-loader | 将一段css代码转换成style标签插入到HTML的head中 |
file-loader | 处理文件(图片)地址,替换成访问地址,并储存在对应位置 |
url-loader | 类似于file-loader,多了图片大小配置功能 |
vue-loader | 解析.vue文件,将解析出的script逻辑代码、style样式、template模板交给对应的loader |
raw-loader | 将文件文件原始内容作为字符串加载,UTF-8编码 |
babel-loader | ES6-->ES5 |
imports-loader | 将其他模块导入到当前模块中,处理非模块化规范编写的文件 |
eslint-loader | 编译前检查ES6语法 |
11.浏览器状态码
代码 | 含义 |
---|---|
1** | 信息,请求收到,继续处理 |
2** | 成功,行为被成功地接受、理解和采纳 |
200 | 正常;请求已完成 |
201 | 正常;紧接 POST 命令 |
202 | 正常;已接受用于处理,但处理尚未完成 |
203 | 正常;部分信息。返回的信息只是一部分 |
204 | 正常;无响应。已接收请求,但不存在要回送的信息,只有响应头没有body数据 |
3** | 重定向 |
301 | 已移动。请求的数据具有新的位置且更改是永久的 |
302 | 已找到。请求的数据临时具有不同 URI |
303 | 请参阅其它。可在另一URI下找到对请求的响应,且应使用 GET 方法检索此响应 |
304 | 未修改。未按预期修改文档。客户端发起了get请求,但页面内容自上次请求以来并未发生变化 |
305 | 使用代理。必须通过位置字段中提供的代理来访问请求的资源 |
306 | 未使用。不再使用;保留此代码以便将来使用 |
4** | 客户端中出现的错误 |
400 | 错误请求。请求中有语法问题,或不能满足请求 |
401 | 未授权。未授权客户端访问数据 |
402 | 需要付款。表示计费系统已有效 |
403 | 禁止。即使有授权也不允许访问 |
404 | 找不到。服务器找不到给定的资源;文档不存在 |
407 | 代理认证请求。客户端首先必须使用代理认证自身 |
415 | 介质类型不受支持。服务器拒绝服务请求,因为不支持请求实体的格式 |
5** | 服务器中出现的错误 |
500 | 内部错误。因为意外情况,服务器不能完成请求 |
501 | 未执行。服务器不支持请求的工具 |
502 | 错误网关。服务器接收到来自上游服务器的无效响应 |
503 | 无法获得服务。由于临时过载或维护,服务器无法处理请求 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。