1、數(shù)據(jù)類型
JavaScript數(shù)據(jù)類型分為:原始類型(存儲(chǔ)在棧中)和對(duì)象類型(存儲(chǔ)在堆中)姚糊;
原始類型包括:數(shù)字、字符串授舟、布爾值救恨、null、undefined释树;
兩種特殊對(duì)象:數(shù)組肠槽、函數(shù);
另外奢啥,JavaScript的類型還可分為可變類型和不可變類型秸仙。可變類型的值是可修改的桩盲。數(shù)組和對(duì)象是可修改的寂纪。原始類型屬于不可變類型,雖然字符串是由字符組成的數(shù)組赌结,但是在JavaScript中字符串是不可變的捞蛋;
可以訪問字符串任意位置的文本,但JavaScript并未提供修改已知字符串的文本內(nèi)容的方法柬姚。
所以拟杉,
記住,在JavaScript中字符串是固定不變的量承,類似replace()和toUpperCase()等方法都返回新字符串搬设,并不會(huì)修改原本字符串。
2撕捍、認(rèn)識(shí)“-0”
下溢:當(dāng)運(yùn)算結(jié)果無(wú)限接近于0并比JavaScript能表示的最小值還小的時(shí)候發(fā)生的一種情形拿穴。這種情況下,JavaScript返回0
.當(dāng)一個(gè)負(fù)數(shù)發(fā)生下溢時(shí)卦洽,返回-0
。
** -0===0
**斜棚。
3阀蒂、JavaScript對(duì)異常情況的處理
- 被零整除并不報(bào)錯(cuò),只是簡(jiǎn)單的返回?zé)o窮大(
Infinity
)或負(fù)無(wú)窮大(-Infinity
)弟蚀; - 0/0是無(wú)意義的蚤霞,結(jié)果返回
NaN
; - 無(wú)窮大除無(wú)窮大义钉、給任意負(fù)數(shù)開方或者算術(shù)運(yùn)算符與不是數(shù)字(或無(wú)法轉(zhuǎn)換為數(shù)字的操作數(shù))一起使用時(shí)都將返回
NaN
昧绣。
4、關(guān)于NaN
特點(diǎn):和任何值都不相等捶闸,包括自身夜畴。
所以拖刃,無(wú)法通過(guò)
x==NaN
來(lái)判斷變量x
是否是NaN
,應(yīng)當(dāng)使用x!=x
來(lái)判斷贪绘,當(dāng)且僅當(dāng)x
為NaN
時(shí)表達(dá)式的結(jié)果才為true
兑牡。
5、二進(jìn)制浮點(diǎn)數(shù)表示法
可以精確表示分?jǐn)?shù)如1/2税灌、1/8均函、1/1024等,但不是精確表示1/10菱涤、1/100等十進(jìn)制分?jǐn)?shù)苞也,所以由于舍入誤差,0.3和0.2之間的近似差值實(shí)際上并不等于0.2和0.1之間的近似差值粘秆。
在JavaScript的真實(shí)運(yùn)行環(huán)境中如迟,0.3-0.2=0.09999999999999998;
6翻擒、7個(gè)“假值”
任意JavaScript的值都可以轉(zhuǎn)換為布爾值氓涣;而轉(zhuǎn)換后為false
的值被稱為假值。JavaScript中的七個(gè)假值如下:
undefined
null
0
-0
NaN
"" //空字符串
false
7陋气、null和undefined
null
和undefined
都可用來(lái)描述“空值”劳吠;它倆的區(qū)別和聯(lián)系如下:
-
null:可認(rèn)為是一個(gè)特殊的對(duì)象值,含義是“非(無(wú))對(duì)象”巩趁,它可以表示數(shù)字痒玩、字符串和對(duì)象是“無(wú)值”的;對(duì)
null
執(zhí)行typeof
運(yùn)算返回字符串"object"
议慰。 -
undefined:是變量的一種取值蠢古,表明變量沒有初始化;如果要查詢對(duì)象屬性或數(shù)組元素的值時(shí)返回
undefined
則說(shuō)明這個(gè)屬性或元素不存在别凹;如果函數(shù)沒有返回任何值草讶,則返回undefined
; -
null
是關(guān)鍵字炉菲,undefined
是預(yù)定義的全局變量堕战,其值就是“未定義”。 - 兩者都是假值拍霜,所以“==”認(rèn)為兩者是相等的嘱丢,需使用嚴(yán)格相等運(yùn)算符“===”進(jìn)行區(qū)分。
-
undefined
是系統(tǒng)級(jí)的祠饺、出乎意料的或類似錯(cuò)誤的值的空缺越驻,而null
是程序級(jí)的、正常的或在意料之中的值的空缺。所以缀旁,**若想將它們賦值給變量或者屬性记劈,或?qū)⑺鼈冏鳛閰?shù)傳入函數(shù),最佳選擇是null
诵棵。
8抠蚣、包裝對(duì)象
原始值本沒有方法和屬性,但是我們知道字符串卻有方法和屬性履澳,這是因?yàn)橹灰昧俗址畇的屬性嘶窄,JavaScript就會(huì)將字符串值通過(guò)調(diào)用new String(s)
的方式轉(zhuǎn)換成對(duì)象來(lái)處理屬性的引用,一旦屬性引用結(jié)束距贷,這個(gè)臨時(shí)創(chuàng)建的對(duì)象就會(huì)被銷毀柄冲。所以,存取字符串忠蝗、數(shù)字或布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象稱作包裝對(duì)象现横。null和undefined沒有包裝對(duì)象。
可通過(guò)String()阁最、Number()或Boolean()構(gòu)造函數(shù)來(lái)顯示創(chuàng)建包裝對(duì)象:
var s="test",n=1,b=true;
var S=new String(s);
var N=new Number(n);
var B=new Boolean(b);
“==”將原始值和其包裝對(duì)象視為相等戒祠,但“===”視為不等。
9速种、原始值和對(duì)象的比較區(qū)別
- 原始值的比較是值的比較:只有值相等時(shí)它們才相等姜盈。
- 對(duì)象的比較是引用的比較:當(dāng)且僅當(dāng)它們引用同一個(gè)對(duì)象時(shí)才相等;即使兩個(gè)對(duì)象包含同樣的屬性及相同的值配阵,她們也不是相等馏颂;各個(gè)索引元素完全相等的兩個(gè)數(shù)組也不相等。