JavaScript作為一種弱類型語言,最大的特點就是動態類型。也就是說不用提前聲明變量的類型,在程序運行時,類型會被動態的確定,并且在執行過程中可以動態的修改變量的類型。同時不同類型變量在運算時會自動進行隱式的類型轉換。以下是一些常見的隱式轉換示例:
varfoo=2020;//typeoffoo->"number"varfoo="SpreadJS"//typeoffoo->"string"varfoo=true+1;//foo=2typeoffoo->"number"varfoo=true+false;//foo=1typeoffoo->"number"varfoo='5'-'2';//foo=3typeoffoo->"number"varfoo=20+20+"SpreadJS"//foo="40SpreadJS"typeoffoo->"string"varfoo="SpreadJS"+20+20//foo="40SpreadJS"typeoffoo->"string"
依據最新的 ECMAScript 標準將數據類型定義了 8 種:
其中為原始類型:Boolean、Null、Undefined、Number、BigInt、String、Symbol 和對象類型:object
關于原始類型需要知道的幾個知識點:
原始類型的值是按值訪問的
即在賦值和修改值時是通過值傳遞的方式來完成的,對變量賦值或者修改值會在內存中重新分配空間。
例如:
vara,b,x,y;a="SpreadJS";b="GrapeCity";x=a;y=b;console.log(a,b,x,y);//result:SpreadJSGrapeCitySpreadJSGrapeCity
a和x, b和y之間賦值是完全獨立的拷貝,互不干涉,如果我們將其中任何一個變量的值重新改變,其他相同值的變量也不會受到任何影響。
嚴格相等===和非嚴格相等==
對于原始類型,==只進行值比較,如果是不同類型則會在轉換后再比較,===則會比較數據類型。
例如:
undefined===null//fasleundefined==null//truetrue===1//fasletrue==1//truenull==0//false
Null 和 Undefined
null和undefined在使用中幾乎沒有區別,在使用非嚴格相等比較時結果也為true,它們的區別就是在于進行數值轉換時它們的字面意義不同,undefined代表未定義,轉為數值為NaN,而null為空、轉為數值時為0。
例如:
Number(undefined)//NaNNumber(null)//01+undefined//NaN1+null//1
雖然兩者差別不大,并不會嚴格按照上面的區分去使用,但在實際項目應用中,對于空值的判斷兩者則都需要考慮。
NaN
NaN 即Not a Number,表示了非數字類型,任何和NaN的操作返回值都是NaN,NaN不等于NaN。其中有一個全局方法 isNaN(),它的作用是檢查一個值是否能被 Number()成功轉換。 如果能轉換成功,就返回 false,否則返回 true 。
例如:
NaN==NaN;//fasleisNaN('123')//false能轉換isNaN('abc')//true不能轉換
浮點數精度誤差
在JavaScript中,整數和浮點數都屬Number數據類型,所有數字都是以64位浮點數形式存儲的,也就是說JavaScript底層沒有整數,1和1.0是相同的。
下面舉幾個例子來說明:
//加法0.1+0.2=0.300000000000000040.1+0.7=0.79999999999999990.2+0.4=0.6000000000000001//減法0.3-0.2=0.099999999999999981.5-1.2=0.30000000000000004//乘法0.8*3=2.400000000000000419.9*100=1989.9999999999998//除法0.3/0.1=2.99999999999999960.69/10=0.06899999999999999//比較0.1+0.2===0.3//false(0.3-0.2)===(0.2-0.1)//false
類似這樣看起來不會算錯的問題,在某些系統尤其是涉及財務的系統中會是一個嚴重的問題,這里就不展開解釋發生誤差的原因了,大家可自行研究,我們這只對解決方案簡單的列一下,1. 可以通過引用類似Math.js、decimal.js、big.js這樣的類庫。2.對于對數字精度要求不高的系統,可以格式化并保留x位小數來處理。3. 計算時,將小數部分和整數部分分開計算再合并,等。
關于引用類型需要知道的幾個知識點:
引用類型的值是按引用訪問的
在操作對象時,實際上是在操作對象的引用而不是實際的對象。給變量賦值改變的是對象的引用關系。
例如:
varobj1={a:1};varobj2=obj1;obj1.a=2;console.log(obj2.a)//result:2.obj1和obj2為同一對象obj1={a:3};console.log(obj2.a)//result:2.obj1指向新對象,obj2不變
引用類型===和==意義相同都為引用的比較
即是否為同一對象,各類型之間的非嚴格相等==比較類型轉換可參考下表
被比較值B | |||||||
Undefined | Null | Number | String | Boolean | Object | ||
被比較值A | Undefined | true | true | false | false | false | IsFalsy(B) |
Null | true | true | false | false | false | IsFalsy(B) | |
Number | false | false | A === B | A === ToNumber(B) | A=== ToNumber(B) | A== ToPrimitive(B) | |
String | false | false | ToNumber(A) === B | A === B | ToNumber(A) === ToNumber(B) | ToPrimitive(B) == A | |
Boolean | false | false | ToNumber(A) === B | ToNumber(A) === ToNumber(B) | A === B | ToNumber(A) == ToPrimitive(B) | |
Object | false | false | ToPrimitive(A) == B | ToPrimitive(A) == B | ToPrimitive(A) == ToNumber(B) | A === B |
類型檢測
JavaScript中類型檢測方法有很多,有例如:typeof、instanceof、Object.prototype.toString、constructor、duck type這幾種。
雖然方法很多,但判斷思路就是兩種:1根據數據類型判斷 2 根據構造函數判斷。
typeof
typeof可以判斷數據類型,依據之前的介紹,javascript變量類型分為值類型和引用類型,typeof應用場景只可以區分值類型的數據類型,例如:
typeof42//"number"typeof{}//"object"typeofundefined//"undefined"
instanceof
和typeof一樣,instanceof用于判斷引用類型的數據類型。
例子:
(function(){}) instanceof Function
其他的還有Object.prototype.toString、constructor、duck type,在這就不一一介紹。
到此,相信大家對“HTML5 入門教程”有了更深的了解,不妨來實際操作一番吧!這里是本站網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
【資料圖】最近這段時間總有小伙伴問小編dnf劍豪加點是什么,小編為此在網上搜尋了一些有關于dnf劍豪加點的知識送給大家,希望能解答各位小伙伴的疑惑。1、暴擊:根據自身的暴擊率進行學習,進圖砍怪在冥思被動5層條件下達到97%暴擊為滿暴擊。2、連環斬:+1,用于跑圖。3、櫻落斬:+1或者不學,可以用來躲無敵技能。4、一花渡江:+1,用于跑圖,其次可以在強制中斷轉職系列技能后使用。5、碎巖裂地斬:剩余S...
12335是什么電話?涉嫌個人信息泄露可以單獨在12321進行舉報,比如通訊錄信息泄露等。涉嫌暴力催收、爆通訊錄可以直接報警,還可以找到網貸平臺所屬地的公安廳廳長信箱進行舉報。還有可以查到網貸公司所屬地的金融監管機構電話進行舉報。最好每一通電話都把音錄上,自己收集點證據,遇到問題第一時間就要舉報、報警,一次都不要忍讓,要不會變本加厲的。電話12335是舉報什么內容?12333是 勞動監察部門的投訴...
(資料圖)關于cien是什么牌子的知識大家了解嗎?以下就是小編整理的關于cien是什么牌子的介紹,希望可以給到大家一些參考,一起來了解下吧!作為通用汽車公司技術旗艦的代表作,頂極V12動力的凱迪拉克Cien概念車將是2002年該品牌100周年紀念的最合適的展示作品。這輛引人注目、極具動感的Cien名稱源自西班牙語,是100的意思,將凱迪拉克的設計與技術完美的融合在一輛中置引擎、2座超級跑車中。...