本想着記筆記裏,可是筆記裏沒有分類,仍是以文章的形式,當我的總結吧,這一篇就看成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