刷了一遍红宝书、你不知道的JS,记录一些js比较重要且不易注意到的点,如有不足的地方,请多多见谅哈Thanks♪(・ω・)ノ
- undefined不是is not defined
- undefined == null 为true(规定是这样。。)
- (!+[]+[]+![]) 为 "truefalse"
- 0.1+0.2!=0.3
- {} + [] 为0
- []+{} 为"[object Object]"
- Array.from()和slice、concat方法类似,可拷贝一个数组,可转换类数组
- 字符串String能进行concat();
- 字符串类型不可突变mutation
- 小数中0.可以省略成 . (包括css)
- 数值精确化 number.toFixed(1)
- Number.isInteger检测是否是整数。
- null指曾赋过值,但是目前没有值。
- -0 === 0 。
- undefined != false
- Object.is(A,B)可以更准确判断两个值是否相等
- Array .length = 0 可以清空数组
- 数组的toString()方法可返回“a,b,c,d”
- Number(null) 等于 0
- 0 == null,0 == undefined 为false 。ES规范中规定,实现细节中前11步都不能达成,执行了第12步返回false。这两个东西再==比较中不转类型,直接比较
- new Number(3)和其他new Number不相等
- Number([]) 等于 0
- Number("") == 0
- Number.([1,2,3]) == NaN . Number([]) == 0 ;
- 强制转换布尔值 !!反转
- a||b 如为true返回a (第一个) 否则返回b。a&&b正好相反 如true返回b。&&先执行,然后才是||
- ==隐式转换优先把非数字转换为数字,把全部转换为数字(==号有很多坑,建议大家单独过一下这块内容,不建议使用==号进行判断)
- ,逗号优先级最低
- js引擎会依赖作用域去找东西
- const方式定义一个数组 可以对该数组进行修改
- ES6参数默认值对null会转换成0
- 解构赋值可以嵌套
- 生成器可暂停自身
- import会提升
- Object对象只能接受字符串作为键值
Set操作可链式调用: .size .add() .clear() .delect() .has()
其他
- 迭代方法array.map,filter,some,forEach...函数中接受一个回调函数,函数参数都是function (当前项,当前项下标,原数组)
- array.some()方法返回布尔值 用于判断数组中任意一个符合条件则返回true,类似一个or,||运算
- array.every()相反,类似与&& ,and运算 必须每一项都返回条件则为true,
- map 为根据回调函数中的返回值映射到新数组中。
- reduce()和reduceRight()相反
- js中使用String的方法js会在运行时后台做处理,自动隐式的生成调用一个String类型的实例在实例上调用方法,最后再销毁实例。对应实例会立即销毁。
- 如果function是第一个词就是函数声明,否则就是一个表达式。js引擎会在解释之前进行js编译 ,变量提升在js执行前,函数提升优先级比变量高,出现在后面的函数声明会覆盖前面的。var a=2 不提升,只提升a对声明,赋值不提升 ,a=2 对执行顺序不会改变,留在原地,函数声明会被提升。但是函数表达式不会被提升。千万不要在if for...等代码块内声明函数
- Object.defineProperty()定义某对象属性描述符定义是否可枚举、是否可配置、是否可写、value。get set 必须成对同时定义,get 操作会查找原型链
- hasOwnProperty针对对象检查属性
- for in循环检查原型链遍历key值,for of 可便利数组项
- js其实没有类的概念 ,class 中的super表示父类,祖先类、类的继承就是复制
- prototype原型对象是在调用new时创建的对象。new 为构造函数调用
- Object.create(null)会创建一个没有原型链的对象,所以非常适合存储数据
Promise
- Promise.resolve().then永远是个promise对象
- promise的then回调中能return一个promise对象来执行promise任务,会以对象形式传递到下一个then
- then 可接受正常值或一个promise对象
- promise.all类似并且、and、&&的关系。
- promise.race类似或者、or、||,promise.race([...,setTimeout])能实现某些操作超时的效果。
- then和catch都会返回一个全新的promise
最后来一个一行代码实现数组去重😬:
function xx(arr){
return arr.filter((item,idx,array)=>arr.indexOf(item) === idx) ;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。