乐趣区

关于前端:一些JS的小知识

/* 阐明:这是一些顺手记录的内容,暂未零碎的排序和分级,后续可能会整顿,也可能就是这样/*

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

同步加载,实用于服务端编程,运行时加载,输入值的拷贝

AMD/RequieJS

异步加载,可并行加载多个模块,加载完即执行,无奈保障执行程序,前置依赖

CMD

异步加载,依赖就近(按需加载),加载实现后需调用执行

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. 函数柯里化

将原函数转化,转化后返回一个能够持续调用的函数,能够持续调用以达到持续传参的目标,传入的参数会被放入闭包中储存起来,等到真正运算时,再将之前传入的所有参数运算后返回最终后果

利用:参数复用 *;提前返回(不同环境执行不同办法);提早计算:记账,迷信计算器等。

* 参数复用:须要屡次执行的函数中有局部参数是雷同的,此时能够先传入雷同参数,而后返回具备差异化参数的闭包函数,此时只在内部调用闭包函数传差别参数即可

退出移动版