javascript數(shù)據(jù)類型中的一些小知識點(diǎn)(推薦)
1. undefined 和 null
undefined是一個(gè)變量而不是一個(gè)關(guān)鍵字,所以可以被重新賦值。為了避免歧義,一般推薦用void 0 來獲取undefined;
null是一個(gè)關(guān)鍵字,所以可以放心地使用null。
Undefined 跟 null 有一定的表意差別,null 表示的是:“定義了但是為空”。所以,在實(shí)際編程時(shí),我們一般不會把變量賦值為 undefined,這樣可以保證所有值為 undefined 的變量,都是從未賦值的自然狀態(tài)?!?/p>
function test(){ var undefined = 123; console.log(undefined) } test() ==> 123
2. +0 和 -0
JavaScript 中有 +0 和 -0,在加法類運(yùn)算中它們沒有區(qū)別,要區(qū)別他們的話,需要使用1/x
3/0 ==> Infinity 3/-0 ==> -Infinity
3. 0.1 + 0.2 = 0.3?
在JS中,0.1+0.2是不等于0.3的,因?yàn)?.1在計(jì)算機(jī)中用二進(jìn)制表示的話,會產(chǎn)生無限循環(huán)位數(shù)。類似于十進(jìn)制中,三分之一就是無限循環(huán)小數(shù)。
所以對這些循環(huán)小數(shù)進(jìn)行數(shù)學(xué)運(yùn)算時(shí),并將二進(jìn)制數(shù)據(jù)再轉(zhuǎn)換成十進(jìn)制時(shí),也還是無線循環(huán)小數(shù),對末尾進(jìn)行截取后,得到的值就是0.30000000000000004
正確的比較方法是使用JS提供的最小精度值,檢查等式左右兩邊差的絕對值是否小于最小精度
Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON true
4. 666 和 new Number(666)的區(qū)別
666是一個(gè)number類型的數(shù)字,而Number(666)是一個(gè)對象類型的數(shù)據(jù)。
‘HELLO'.charAt(1) ==》 'E'
上門代碼中,點(diǎn)(.)運(yùn)算符提供了裝箱操作,會根據(jù)一個(gè)基礎(chǔ)類型構(gòu)造一個(gè)臨時(shí)對象,所以能在基礎(chǔ)類型上調(diào)用對應(yīng)對象的方法
5. parseInt 和 parseFloat
parseInt(string, radix)
parseInt(15,6) 11 ==> 1*6+5 parseInt(0x15) 21 ==> 16*1+5
parseFloat 則直接把原字符串作為十進(jìn)制來解析,它不會引入任何的其他進(jìn)制
6. 裝箱轉(zhuǎn)換
每一種基本類型 Number、String、Boolean、Symbol 在對象中都有對應(yīng)的類,所謂裝箱轉(zhuǎn)換,正是把基本類型轉(zhuǎn)換為對應(yīng)的對象。
Symbol 比較特殊,不能直接用 new Symbol獲得對應(yīng)的對象, 可以用Object(Symbol('hello')) 來獲得。
var symbolObject = Object(Symbol("a")); console.log(typeof symbolObject); //object console.log(symbolObject instanceof Symbol); //true console.log(symbolObject.constructor == Symbol); //true
7. 拆箱轉(zhuǎn)換
把對象轉(zhuǎn)換成number或string時(shí),會默認(rèn)進(jìn)行拆箱轉(zhuǎn)換,即會調(diào)用對象內(nèi)置的toString或者valueOf方法將對象轉(zhuǎn)換成基本類型
這兒定義了一個(gè)obj對象,重寫了它的valueOf和toString方法進(jìn)行測試,可以看到,當(dāng)Number(obj)時(shí),valueOf優(yōu)先于String執(zhí)行,但是當(dāng)這2個(gè)方法都沒有返回基本類型的數(shù)據(jù)時(shí),就會產(chǎn)生錯(cuò)誤。
當(dāng)valueOf方法返回基本類型的數(shù)據(jù)時(shí),成功將obj轉(zhuǎn)換成了數(shù)字,而且toSring方法沒有執(zhí)行。
當(dāng)valueOf返回非基本類型時(shí),toString方法才會被調(diào)用。只有當(dāng)Object到 String 的拆箱轉(zhuǎn)換才會優(yōu)先調(diào)用 toString方法。
注:ES6允許對象通過顯式指定 toPrimitive Symbol 來覆蓋原有的行為。
var o = { valueOf : () => {console.log("valueOf"); return {}}, toString : () => {console.log("toString"); return {}} } o[Symbol.toPrimitive] = () => {console.log("toPrimitive"); return "hello"} console.log(o + "") // toPrimitive // hello
以上所述是小編給大家介紹的javascript數(shù)據(jù)類型中的一些小知識點(diǎn)解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- js判斷數(shù)據(jù)類型如判斷是否為數(shù)組是否為字符串等等
- C#實(shí)現(xiàn)任意數(shù)據(jù)類型轉(zhuǎn)成json格式輸出
- Js從頭學(xué)起(基本數(shù)據(jù)類型和引用類型的參數(shù)傳遞詳細(xì)分析)
- js 數(shù)據(jù)類型轉(zhuǎn)換總結(jié)筆記
- 介紹PostgreSQL中的jsonb數(shù)據(jù)類型
- JavaScript數(shù)據(jù)類型之基本類型和引用類型的值
- Javascript中的五種數(shù)據(jù)類型詳解
- js數(shù)值計(jì)算時(shí)使用parseInt進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換(jquery)
- 簡單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換
- javascript中的五種基本數(shù)據(jù)類型
相關(guān)文章
根據(jù)地區(qū)不同顯示時(shí)間的javascript代碼
根據(jù)地區(qū)不同顯示時(shí)間的javascript代碼...2007-08-08JavaScript高級程序設(shè)計(jì) 閱讀筆記(十九) js表格排序
js表格排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下2012-08-08JavaScript實(shí)現(xiàn)簡易計(jì)算器案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡易計(jì)算器案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2022-07-07js+canvas實(shí)現(xiàn)轉(zhuǎn)盤效果(兩個(gè)版本)
這篇文章主要為大家詳細(xì)介紹了兩個(gè)版本的js+canvas實(shí)現(xiàn)轉(zhuǎn)盤效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09JavaScript獲取當(dāng)前頁面上的指定對象示例代碼
這篇文章主要介紹了JavaScript獲取當(dāng)前頁面上指定對象的方法,需要的朋友可以參考下2014-02-02