本想着记笔记里,可是笔记里没有分类,仍是以文章的形式,当我的总结吧,这一篇就看成JS基础篇的记录吧,有修改的和新增的持续更新~数组
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 c" console.log(new Date(2015,4,4).valueOf()); // "1430668800000 "
注意: Math和Error没有valueOf方法this
字符串转换为数字的三种方法js
1:pasreInt()
和parseFloat()
方法:转换不成功的返回NaN
2:强制类型转换: Boolean(val)/Number(val)/String(val)
3: 利用js变量弱类型转换:*1 (实际上调用了.valueOf方法),而后使用Number.isNaN
来判断是否为NaN,或者使用a!==a
来判断是否为NaN,由于NaN!==NaN
code
'32'*1 //32 'ds'*1 //NaN
也可使用+
来转化为数字,一元正号位于操做数前面,计算操做数的数值,若是操做数不是一个数值,会尝试将其转坏为一个数值,参考见 https://developer.mozilla.org...对象
+'123' //123 "'ds' //NaN +null //0 +undefined //NaN +{valueOf: () => '3'} //3
除了false,null,undefined,0,"",NaN
,都是假值ip
const compact = arr => arr.filter(Boolean) compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]) // [ 1, 2, 3, 'a', 's', 34 ]
双否认位操做符的优点在于它执行相同的操做运行速度更快ci
Math.floor(4.9) === 4
简写为 ~~4.9 === 4
字符串
注意:对于负数来讲结果不一样
ps: 还能够用 4.9 | 0 === 4
get
num & 1
//奇数返回,偶数返回0it
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`) round(1.245, 2) //1.25
===
,除了obj.c == null
这种状况obj.c == null
等价于obj.c === undefined/null
若是值为真,首先能够排除undefined和null,根据对象类型,能够作出以下判断
数值类型:表示不是0,而且有肯定含义的值(包括无穷大)
数组,对象,函数:只能表示不是undefined或null,并不能判断是否有元素和内容。
var a = undefined/null !!a === false var b = 0 !!b === false var c = '' !!c === false // 其余都为true var d = []/{} !!d === true
做为条件表达式,不须要使用!!进行转换,JS会自动转换,!!就只将类型转换为Boolean值
if (!!value) {} // 等价与下面 if (value) {}
123 == '123' //true '' == 0 //true
null == undefined //true null == '' //false null == 0 //fasle null == false //false undefined == '' //false undefined == 0 //false undefined == false //false
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(); }, }
0.1+0.2 !=0.3
会存在精度丢失问题
0.1
和0.2
的二进制都是以1100无线循环的小数
0.1的二进制:0.0001100110011001100110011001100110011001100110011001101
0.的二进制:0.001100110011001100110011001100110011001100110011001101