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

栏目: JavaScript · 发布时间: 6年前

内容简介:本想着记笔记里,但是笔记里没有分类,还是以文章的形式吧,当个人总结吧,这一篇就当作JS基础篇的记录吧,持续更新~toString():返回一个反映这个对象的字符串valueOf():返回它相应的原始值

本想着记笔记里,但是笔记里没有分类,还是以文章的形式吧,当个人总结吧,这一篇就当作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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析导论

算法设计与分析导论

R.C.T.Lee (李家同)、S.S.Tseng、R.C.Chang、Y.T.Tsai / 王卫东 / 机械工业 / 2008-1 / 49.00元

本书在介绍算法时,重点介绍用干设计算法的策略.非常与众不同。书中介绍了剪枝搜索、分摊分析、随机算法、在线算法以及多项式近似方案等相对较新的思想和众多基于分摊分析新开发的算法,每个算法都与实例一起加以介绍,而且每个例子都利用图进行详细解释。此外,本书还提供了超过400幅图来帮助初学者理解。本书适合作为高等院校算法设计与分析课程的高年级本科生和低年级研究生的教材,也可供相美科技人员和专业人七参考使用。一起来看看 《算法设计与分析导论》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具