1. js中并不是所有值都是對象
- 基本數據類型不是對象,沒有方法和屬性
??方法:是某個特定對象才能調用的函數
??屬性:是隸屬于某個特定對象的變量
??對象:是一種字包含的數據類型
2. JavaScript與ECMAScript的關系
- ECMAScript和JavaScript的關系是,前者是后者的規(guī)格,后者是前者的一種實現。在日常場合,這兩個詞是可以互換的。
2.1基本語法
- 變量提升:就是所有的變量的聲明語句,都會被提升到代碼的頭部
- for循環(huán)和while循環(huán)相同
- 三元運算符
(條件) ? 表達式1 : 表達式2可視為if...else的簡寫 - do...while循環(huán)不管條件是否為true至少執(zhí)行一次
- continue語句用于立即終止本輪循環(huán),返回循環(huán)結構的頭部,開始下一輪循環(huán)
- break用于直接跳出循環(huán)或代碼塊
2.2數據類型
- typeof null返回object
- if語句中
undefined和null都會轉為false - null是一個表示“空”的對象,轉為數值時為0;
- undefined是一個表示”此處無定義”的原始值,轉為數值時為NaN。
- 轉換規(guī)則是除了下面六個值被轉為false,其他值都視為true。
undefined
null
false
0
NaN
"或''(空字符串)
2.3數值
-
js中所有數字都是64位雙精度浮點數
- 第1位:符號位,0表示正數,1表示負數
- 第2位到第12位(共11位):指數部分
- 第13位到第64位(共52位):小數部分(即有效數字)
- 絕對值小于等于2的53次方的整數,即2-53到253,都可以精確表示。
-
數值的進制
十進制:沒有前導0的數值。
八進制:有前綴0o或0O的數值,或者有前導0、且只用到0-7的八個阿拉伯數字的數值。
十六進制:有前綴0x或0X的數值。
二進制:有前綴0b或0B的數值。
-
parseInt方法用于將字符串轉為整數。
- 如果parseInt的參數不是字符串,則會先轉為字符串再轉換。
- 字符串轉為整數的時候,是一個個字符依次轉換,如果遇到不能轉為數字的字符,就不再進行下去,返回已經轉好的部分。
3.如果以0x開頭會照16進制解析
4如果以0開頭會以10進制解析 - parseInt方法還可以接受第二個參數(2到36之間),表示被解析的值的進制
- 如果第一個參數不是字符串,"0x11"寫成0x11則會先轉換為10進制,在進行第二個參數的轉換
-isNaN()
-
isNaN()可以用來判斷一個值是否為NaN。
- isNaN只對數值有效,如果傳入其他值,會被先轉成數值。相當于isNaN(Number('xxx'))
2.4字符串
- 字符串只能寫在一行內,如果要分成多行,每一行末尾加上\和換行符
- 反斜杠(\)在字符串內有特殊含義,用來表示一些特殊字符,所以又稱為轉義符。
- 字符串可視為字符數組可以使用[]運算符返回某個位置的字符
反斜杠\有3種特殊的用法:
- \HHH
反斜杠后面緊跟三個八進制數(000到377),代表一個字符。HHH對應該字符的 Unicode 碼點,比如\251表示版權符號。顯然,這種方法只能輸出256種字符。 - \xHH
\x后面緊跟兩個十六進制數(00到FF),代表一個字符。HH對應該字符的 Unicode 碼點,比如\xA9表示版權符號。這種方法也只能輸出256種字符。 - \uXXXX
\u后面緊跟四個十六進制數(0000到FFFF),代表一個字符。HHHH對應該字符的 Unicode 碼點,比如\u00A9表示版權符號。
- 字符集:
- 每個字符在javascript中都以16位(2個字節(jié))的utf-16格式儲存
- JavaScript 使用 Unicode 字符集。JavaScript 引擎內部,所有字符都用 Unicode 表示。
- 由于歷史原因,對于碼點在U+10000到U+10FFFF之間的字符,JavaScript 總是認為它們是兩個字符
- Base64 轉碼
- 文本有不可打印的符號可以使用base64轉碼
-
btoa():任意值轉為 Base64 編碼
atob():Base64 編碼轉為原來的值 - 必須是ASCII 碼的字符
2.5對象
- 對象就是hash,就是一組“鍵值對”(key-value)的集合,是一種無序的復合數據集合。
- 對象中所有的key(鍵名)的都是字符串,如果是數值會自動轉換為字符串
- 如果key不符合標識符的條件,(比如第一個字符為數字,或者含有空格或運算符且也不是數字),必須加上引號
- key也叫屬性,如果value為函數,那么通常把這個屬性稱為“方法”,如果屬性的值還是一個對象,就形成了鏈式引用。
- 如果只采用大括號。JavaScript 規(guī)定,如果行首是大括號,一律解釋為語句(即代碼塊),如果想表達對象則要咋在外加上圓括號
({a:123}) - 讀取屬性
obj.p或者obj['p']如果不加引號則指向一個變量 - 查看對象的所有屬性
Object.keys
-delete命令可以刪除對象的屬性,刪除不存在的屬性也會返回true,不能刪除繼承的屬性 -
in運算符檢查某個對象是否包含某個屬性(key) (不能識別是否為繼承的,都會返回true) -
for(...in...){}用于遍歷對象的全部屬性 - with 語句用來批量操作同一個對象的多個屬性(如果with區(qū)塊內部有變量的賦值操作,必須是當前對象已經存在的屬性,否則會生成一個全局變量)
2.6數組
- 數組其實是固定key的對象(hash),key['0'],['1'],['2'].['3'],['4']...都是字符串
- 數組的length是其中最大key+1,不是其中的個數
- 當數組的某個元素是空元素,即2個逗號之間沒有任何值,我們稱改數組存在空位
- 空位不會影響length屬性,空位是可讀取的,返回undefined,delete命令刪除某個屬性,這個位置就形成了空位
- 空位就是數組沒有這個元素,所以不會被遍歷到,而undefined則表示數組有這個元素,值是undefined,所以遍歷不會跳過。
- 類似數組的對象,特征是具有l(wèi)enght屬性,length不是動態(tài)的
- 可以使用
var arr = Array.prototype.slice.call(arrayLike)把對象變成真正的數組