1. js中并不是所有值都是對象
- 基本數(shù)據(jù)類型不是對象,沒有方法和屬性
??方法:是某個特定對象才能調(diào)用的函數(shù)
??屬性:是隸屬于某個特定對象的變量
??對象:是一種字包含的數(shù)據(jù)類型
2. JavaScript與ECMAScript的關(guān)系
- ECMAScript和JavaScript的關(guān)系是岩睁,前者是后者的規(guī)格,后者是前者的一種實現(xiàn)纵散。在日常場合,這兩個詞是可以互換的隐圾。
2.1基本語法
- 變量提升:就是所有的變量的聲明語句伍掀,都會被提升到代碼的頭部
- for循環(huán)和while循環(huán)相同
- 三元運算符
(條件) ? 表達(dá)式1 : 表達(dá)式2
可視為if...else的簡寫 - do...while循環(huán)不管條件是否為true至少執(zhí)行一次
- continue語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部暇藏,開始下一輪循環(huán)
- break用于直接跳出循環(huán)或代碼塊
2.2數(shù)據(jù)類型
- typeof null返回object
- if語句中
undefined
和null
都會轉(zhuǎn)為false - null是一個表示“空”的對象硕盹,轉(zhuǎn)為數(shù)值時為0;
- undefined是一個表示”此處無定義”的原始值叨咖,轉(zhuǎn)為數(shù)值時為NaN。
- 轉(zhuǎn)換規(guī)則是除了下面六個值被轉(zhuǎn)為false啊胶,其他值都視為true甸各。
undefined
null
false
0
NaN
"或''(空字符串)
2.3數(shù)值
-
js中所有數(shù)字都是64位雙精度浮點數(shù)
- 第1位:符號位,0表示正數(shù)焰坪,1表示負(fù)數(shù)
- 第2位到第12位(共11位):指數(shù)部分
- 第13位到第64位(共52位):小數(shù)部分(即有效數(shù)字)
- 絕對值小于等于2的53次方的整數(shù)趣倾,即2-53到253,都可以精確表示某饰。
-
數(shù)值的進(jìn)制
十進(jìn)制:沒有前導(dǎo)0的數(shù)值儒恋。
八進(jìn)制:有前綴0o或0O的數(shù)值,或者有前導(dǎo)0黔漂、且只用到0-7的八個阿拉伯?dāng)?shù)字的數(shù)值诫尽。
十六進(jìn)制:有前綴0x或0X的數(shù)值。
二進(jìn)制:有前綴0b或0B的數(shù)值炬守。
-
parseInt方法用于將字符串轉(zhuǎn)為整數(shù)牧嫉。
- 如果parseInt的參數(shù)不是字符串,則會先轉(zhuǎn)為字符串再轉(zhuǎn)換减途。
- 字符串轉(zhuǎn)為整數(shù)的時候酣藻,是一個個字符依次轉(zhuǎn)換,如果遇到不能轉(zhuǎn)為數(shù)字的字符鳍置,就不再進(jìn)行下去辽剧,返回已經(jīng)轉(zhuǎn)好的部分。
3.如果以0x開頭會照16進(jìn)制解析
4如果以0開頭會以10進(jìn)制解析 - parseInt方法還可以接受第二個參數(shù)(2到36之間)税产,表示被解析的值的進(jìn)制
- 如果第一個參數(shù)不是字符串怕轿,"0x11"寫成0x11則會先轉(zhuǎn)換為10進(jìn)制偷崩,在進(jìn)行第二個參數(shù)的轉(zhuǎn)換
-isNaN()
-
isNaN()可以用來判斷一個值是否為NaN。
- isNaN只對數(shù)值有效撤卢,如果傳入其他值环凿,會被先轉(zhuǎn)成數(shù)值。相當(dāng)于isNaN(Number('xxx'))
2.4字符串
- 字符串只能寫在一行內(nèi)放吩,如果要分成多行智听,每一行末尾加上\和換行符
- 反斜杠(\)在字符串內(nèi)有特殊含義,用來表示一些特殊字符渡紫,所以又稱為轉(zhuǎn)義符到推。
- 字符串可視為字符數(shù)組可以使用[]運算符返回某個位置的字符
反斜杠\有3種特殊的用法:
- \HHH
反斜杠后面緊跟三個八進(jìn)制數(shù)(000到377),代表一個字符惕澎。HHH對應(yīng)該字符的 Unicode 碼點莉测,比如\251表示版權(quán)符號。顯然唧喉,這種方法只能輸出256種字符捣卤。 - \xHH
\x后面緊跟兩個十六進(jìn)制數(shù)(00到FF),代表一個字符八孝。HH對應(yīng)該字符的 Unicode 碼點董朝,比如\xA9表示版權(quán)符號。這種方法也只能輸出256種字符干跛。 - \uXXXX
\u后面緊跟四個十六進(jìn)制數(shù)(0000到FFFF)子姜,代表一個字符。HHHH對應(yīng)該字符的 Unicode 碼點楼入,比如\u00A9表示版權(quán)符號哥捕。
- 字符集:
- 每個字符在javascript中都以16位(2個字節(jié))的utf-16格式儲存
- JavaScript 使用 Unicode 字符集。JavaScript 引擎內(nèi)部嘉熊,所有字符都用 Unicode 表示遥赚。
- 由于歷史原因,對于碼點在U+10000到U+10FFFF之間的字符记舆,JavaScript 總是認(rèn)為它們是兩個字符
- Base64 轉(zhuǎn)碼
- 文本有不可打印的符號可以使用base64轉(zhuǎn)碼
-
btoa():
任意值轉(zhuǎn)為 Base64 編碼
atob():
Base64 編碼轉(zhuǎn)為原來的值 - 必須是ASCII 碼的字符
2.5對象
- 對象就是hash鸽捻,就是一組“鍵值對”(key-value)的集合,是一種無序的復(fù)合數(shù)據(jù)集合泽腮。
- 對象中所有的key(鍵名)的都是字符串,如果是數(shù)值會自動轉(zhuǎn)換為字符串
- 如果key不符合標(biāo)識符的條件御蒲,(比如第一個字符為數(shù)字,或者含有空格或運算符且也不是數(shù)字)诊赊,必須加上引號
- key也叫屬性厚满,如果value為函數(shù),那么通常把這個屬性稱為“方法”碧磅,如果屬性的值還是一個對象碘箍,就形成了鏈?zhǔn)揭谩?/li>
- 如果只采用大括號遵馆。JavaScript 規(guī)定,如果行首是大括號丰榴,一律解釋為語句(即代碼塊)货邓,如果想表達(dá)對象則要咋在外加上圓括號
({a:123})
- 讀取屬性
obj.p
或者obj['p']
如果不加引號則指向一個變量 - 查看對象的所有屬性
Object.keys
-delete
命令可以刪除對象的屬性,刪除不存在的屬性也會返回true四濒,不能刪除繼承的屬性 -
in
運算符檢查某個對象是否包含某個屬性(key) (不能識別是否為繼承的换况,都會返回true) -
for(...in...){}
用于遍歷對象的全部屬性 - with 語句用來批量操作同一個對象的多個屬性(如果with區(qū)塊內(nèi)部有變量的賦值操作,必須是當(dāng)前對象已經(jīng)存在的屬性盗蟆,否則會生成一個全局變量)
2.6數(shù)組
- 數(shù)組其實是固定key的對象(hash)戈二,key['0'],['1'],['2'].['3'],['4']...都是字符串
- 數(shù)組的length是其中最大key+1,不是其中的個數(shù)
- 當(dāng)數(shù)組的某個元素是空元素喳资,即2個逗號之間沒有任何值觉吭,我們稱改數(shù)組存在空位
- 空位不會影響length屬性,空位是可讀取的仆邓,返回undefined鲜滩,delete命令刪除某個屬性,這個位置就形成了空位
- 空位就是數(shù)組沒有這個元素节值,所以不會被遍歷到绒北,而undefined則表示數(shù)組有這個元素,值是undefined察署,所以遍歷不會跳過。
- 類似數(shù)組的對象峻汉,特征是具有l(wèi)enght屬性贴汪,length不是動態(tài)的
- 可以使用
var arr = Array.prototype.slice.call(arrayLike)
把對象變成真正的數(shù)組