JS关于JS的一些知识点JS基础纯记录

33次阅读

共计 1944 个字符,预计需要花费 5 分钟才能阅读完成。

本想着记笔记里,但是笔记里没有分类,还是以文章的形式吧,当个人总结吧,这一篇就当作 JS 基础篇的记录吧,持续更新~

关于 JS 的一些小技巧

1:JS 中 toString 和 valueof()区别

toString(): 返回一个反映这个对象的字符串

valueOf(): 返回它相应的原始值

console.log([1,2,3].toString()); // 1,2,3
console.log(new Date(2015,4,4).toString()); // Mon May 04 2015 00:00:00 GMT+0800
console.log(new Date(2015,4,4).valueOf()); //  1430668800000  

注意:Math 和 Error 没有 valueOf 方法

字符串转换为数字的三种方法 js
1:pasreInt()和 parseFlat()方法:转换不成功的返回 NaN

2:强制类型转换:Boolean(val)/Number(val)/String(val)

3: 利用 js 变量若类型转换:*1(实际上调用了.valueOf 方法),然后使用 Number.isNaN 来判断是否为 NaN,或者使用 a!== a 来判断是否为 NaN,因为 NaN!==NaN

'32'*1  //32
'ds'*1  //NaN

也可以使用 + 来转化为数字, 一元正号位于操作数前面,计算操作数的数值,如果操作数不是一个数值,会尝试将其转坏为一个数值,参考见 https://developer.mozilla.org…

+'123' //123
"'ds'  //NaN
+null  //0
+undefined //Nam
+{valueOf: () => '3'}  //3
2:Boolean 可以过滤掉数组的所有假值

除了 false,null,undefined,0,””,NaN, 都是假值

const compact = arr =>arr.filter(Boolean)
compact([0, 1, false, 2, '', 3,'a','e'* 23, NaN,'s', 34])             // [1, 2, 3,'a','s', 34]
3:双位运算符

双否定位操作符的优势在于它执行相同的操作运行速度更快。

Math.floor(4.9) ===4

简写为 ~~4.9 ===4

注意:对于负数来说结果不同

ps: 还可以用 4.9 | 0 ===4

4:判断奇偶数

num & 1 // 奇数返回,偶数返回 0

5:精确到指定位数的小数 2
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`)
round(1.245.2) //1.25
5:程序中所有的等于判断都要用 ===,除了 obj.c == null 这种情况

obj.c == null 等价于 obj.c === undefined/null

原始类型和引用类型比较

1:String 和 Number 比较,会先将 String 转换成 Number 类型
123 == '123'  // true
'' == 0  // true
2:null 和 undefined 比较结果是 true,除此之外,null、undefined 和其他任何结果值的比较值都为 false
null == undefined // true
null == '' false
null == 0 // fasle
null == false
undefined == '' // false
undefined == 0 // false
undefined == false // false
3: 当原始类型和引用类型做比较时,对象类型会依照 Toprimitive 规则转换为原始类型
'[object Object] == {}' // true
'1,2,3' == [1, 2, 3] // true
[] == ![] // true

! 的优先级高于 ==,![] 首先会被转换成 false,然后根据上面第三点,false 转换成 Number 类型 0, 左侧[] 转化成为 0,两侧比较相等。

4:如何让:a==1 && a==2 && a==3
根据拆箱转换,以及 == 的隐式转换,可以如下写:

const a = {value:[3,2,1],
   valueOf: () => {return this.value.pop(); },
} 
5: 为什么 0.1+0.2 !=0.3
计算机中所有的数据都是以二进制存储的,所以在计算机计算时要把数据先转换成二进制进行计算,然后把计算结果转换成十进制。

会存在精度丢失问题

0.10.2 的二进制都是以 1100 无线循环的小数

0.1 的二进制:
0.0001100110011001100110011001100110011001100110011001101

0. 的二进制:
0.001100110011001100110011001100110011001100110011001101

正文完
 0