摘要:如何讓根據拆箱轉換,以及的隱式轉換,可以如下寫為什么計算機中所有的數據都是以二進制存儲的,所以在計算機計算時要把數據先轉換成二進制進行計算,然后把計算結果轉換成十進制。會存在精度丟失問題和的二進制都是以無線循環的小數的二進制的二進制
本想著記筆記里,但是筆記里沒有分類,還是以文章的形式,當個人總結吧,這一篇就當作JS基礎篇的記錄吧,有修改的和新增的持續更新~
關于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方法
字符串轉換為數字的三種方法js
1:pasreInt()和parseFloat()方法:轉換不成功的返回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 //NaN +{valueOf: () => "3"} //3
除了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 ]
雙否定位操作符的優勢在于它執行相同的操作運行速度更快
Math.floor(4.9) === 4簡寫為 ~~4.9 === 4
注意:對于負數來說結果不同
ps: 還可以用 4.9 | 0 === 4
num & 1 //奇數返回,偶數返回0
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`) round(1.245, 2) //1.25
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
"[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的二進制都是以1100無線循環的小數
0.1的二進制:
0.0001100110011001100110011001100110011001100110011001101
0.的二進制:
0.001100110011001100110011001100110011001100110011001101
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104815.html
摘要:因為工作中一直在使用,也一直以來想總結一下自己關于的一些知識經驗。于是把一些想法慢慢整理書寫下來,做成一本開源免費專業簡單的入門級別的小書,提供給社區。本書的后續可能會做成視頻版本,敬請期待。本作品采用署名禁止演繹國際許可協議進行許可 React.js 小書 本文作者:胡子大哈本文原文:React.js 小書 轉載請注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huzi...
閱讀 1446·2023-04-25 19:51
閱讀 1934·2019-08-30 15:55
閱讀 1745·2019-08-30 15:44
閱讀 2706·2019-08-30 13:58
閱讀 2700·2019-08-29 16:37
閱讀 1079·2019-08-29 15:34
閱讀 4009·2019-08-29 11:05
閱讀 2626·2019-08-28 17:51