基本類型
- 變量二次聲明無意義,除非在第二次聲明的時候,也賦值
- 有一些保留字
- javascript保留字
- 使用保留字報錯類型:
Uncaught SyntaxError: Unexpected token finally
-
while只有一條語句的時候可省略大括號 - 循環(huán)標(biāo)簽使用方式
- 在需要跳出的
for循環(huán)層添加label - 在
continue和break后添加同名label
數(shù)據(jù)類型
- 有
String,Number,Boolean,Undefined,Null,Object - 使用
typeof后有string,number,boolean,undefined,object,function
- 注意和數(shù)據(jù)類型相比,少了
null多了function - 結(jié)果都是小寫
-
undefined和null使用==相等。計算時,undefined是NaN,null是0 - 返回布爾值的地方
- 關(guān)系運算符
-
&&,||,!
- 轉(zhuǎn)化為false的情況
- '',0,NaN,undefined,null,false
-
if后需要布爾類型,[]和{}其實是true
數(shù)值
-
Number.MAX_VALUE和Number.MIN_VALUE - 科學(xué)記數(shù)法
- 當(dāng)小數(shù)點前有21位,還是正常顯示。有22位,開始科學(xué)計數(shù)
- 當(dāng)小數(shù)點后有5位0,正常顯示。有6位0,開始科學(xué)計數(shù)
- 各進制前綴,
0x十六,0o八,0b二 - NaN和
isNaN() - Infinity和
isInfinity() -
parseInt()第二個參數(shù)說明了數(shù)據(jù)是什么進制。同時,只能轉(zhuǎn)化為十進制
字符串
- 長字符換行,每行后用
\ - 轉(zhuǎn)義字符
- 可有轉(zhuǎn)移符號
\n,\r,\t,\\等 - 可有轉(zhuǎn)移字符,都對應(yīng)unicode碼點
-
\HHH三位八進制 -
\xHH兩位十六進制 -
\uHHHH四位十六進制
-
-
bit,Byte,KB,MB,GB,TB
- 存儲單位和網(wǎng)速的單位,不管是 B 還是 b,代表的都是 字節(jié) Byte。
- 帶寬的單位,不管是 B 還是 b,代表的都是 比特 bit 。
- Base64是最常見的用于傳輸(8Bit)字節(jié)碼的編碼方式
- ASCII 是針對英文字符編碼的方式
- Unicode 是針對多種語言進行編碼的方式
- 為了解決Unicode編碼在互聯(lián)網(wǎng)上傳播的問題,各種規(guī)范出現(xiàn)
utf-8,代表每次8個位傳輸數(shù)據(jù)
- GBK本來擴展自ASCII,后漸漸形成GBK。因為還有很多少數(shù)名族的語言
對象
- 創(chuàng)建對象
{}- new Object
-
Object.create(prototype),這種可以利用原型創(chuàng)造一個新的對象,經(jīng)常用在繼承
- 對象引用
- 兩個變量對引用同一個對象,則共用
- 其中一個取消對對象的引用,不會影響另外一個
var a = {}
var b = a
a = 1
console.log(b) // {}
- 檢測全局變量,使用
a in window方式,如果直接使用if(a)在沒有a的情況下會報錯 -
delete成功刪除之后返回true,不能刪除繼承的屬性 -
in用于檢測對象是否含有某個屬性,也就是鍵名 -
for in遍歷對象和繼承的可遍歷屬性,跳過不可枚舉屬性 - 關(guān)于屬性的兩個方法
Object.defineProperty(obj,propName,{})obj.hasOwnProperty()
數(shù)組
- 其實
arr[0]等同與arr['0']和arr[0.00] - 類數(shù)組對象
- arguments
- 元素集合
- 字符串
- 類數(shù)組轉(zhuǎn)化成數(shù)組
Array.property.slice.call(arrayLike)
- 數(shù)組也能使用
in,會將索引和屬性遍歷出來 - 數(shù)組空位計算在內(nèi),但是空位和undefined是不一樣的。使用數(shù)組的
forEach方法、for...in結(jié)構(gòu)、以及Object.keys方法進行遍歷,空位都會被跳過
函數(shù)
- 不會重載,后邊的會覆蓋前邊的同名函數(shù)
- 在
if語句塊中只能使用函數(shù)表達(dá)式,不能使用函數(shù)定義 -
fn.name屬性返回緊跟在function關(guān)鍵字之后的那個函數(shù)名 -
fn.name返回定義時參數(shù)個數(shù) -
fn.toString()返回函數(shù)的源碼 - 函數(shù)的作用域是定義時所在的作用域,和運行時作用域無關(guān)
var a = 1;
var x = function () {
console.log(a);
};
function f() {
var a = 2;
x();
}
f() // 1
- 當(dāng)函數(shù)傳入對象作為參數(shù)的時候
- 如果修改對象某個屬性,將對外部存在影響
- 如果是替換掉整個參數(shù),不會影響到外部
- 同名參數(shù),取后出現(xiàn)的值。即使只傳入第一個,但是也會取后者
undefined -
arguments.callee返回函數(shù)本身 - 閉包作用
- 讀取函數(shù)內(nèi)部的變量
- 讓變量始終保存在內(nèi)存中,保存上次運行的狀態(tài)
- 函數(shù)的立即調(diào)用有兩種寫法
-
eval在嚴(yán)格模式下,聲明變量不能影響外部變量。但是賦值語句等還是可以改變外部變量值
運算符
- 字符串的比較是按照字典的順序,靠后的大
// 嚴(yán)重注意,字符串形式的數(shù)值比較
'2' > '11' // true
[2] > [11] // true,因為會轉(zhuǎn)換成 '2' > '11'
- 對象參與比較,會調(diào)用
obj.valueOf().toString() - 進制不同,但是轉(zhuǎn)化為10進制相同,就全等
- 嚴(yán)格相等運算符比較的是地址,而大于或小于運算符比較的是值。
{} === {} // false
[] === [] // false
- 原始數(shù)據(jù)類型有string,number,boolean。它們混合比較的時候,會轉(zhuǎn)換成數(shù)值類型再進行比較
'true' == true //false
// 第一步 Number('true') ---> NaN
// 第二部 Number(true) ---> 1
// NaN == 1 ---> 結(jié)果為false
- 對象與原始類型值比較,對象轉(zhuǎn)化成原始類型的值,再進行比較。
[1] == 1 // true
[1] == '1' // true
[1] == true // true
- 邏輯運算符和位運算符,位運算符可以用來擴大或縮小2的n次方
-
void用來防止頁面跳轉(zhuǎn) - 賦值運算符和三元運算符,是從右到左的
數(shù)據(jù)類型轉(zhuǎn)換
- 主要是String,Boolean,Number之間的轉(zhuǎn)換
錯誤處理機制
- Error的
name和stack屬性存在兼容問題,后者可以顯示錯誤首先是在哪里拋出的 - 錯誤類型和出現(xiàn)原因
- synaxError 語法錯誤
- referenceError 引用錯誤
- 調(diào)用不存在的值
- 不允許賦值
- typeError 類型錯誤
- 由 new 引起,不能對基本類型使用 new
- URIError url參數(shù)不正確的時引起
- 主要由編碼的幾種方法引起
- evalError 使用錯誤
- rangeError
- catch中的
return語句會延遲到finally中執(zhí)行
編程風(fēng)格
- 關(guān)于
()和空格的問題
- 定義非匿名函數(shù)和調(diào)用函數(shù),函數(shù)名和
()不能有空格 - 其他情況,都有一個空格
- 全局變量可以使用大寫區(qū)分
- 建議不要將目的不同的語句合并成一行、