第三章 基本概念express
「undefined」——若是這個值爲定義;數組
「boolean」——若是這個值是布爾值;瀏覽器
「string」——若是這個值是字符串;安全
「number」——若是這個值是數值;函數
「object」——若是這個值是對象或者null;性能
「function」——若是這個值是函數。測試
經過typeof操做符來區分函數和其餘對象是有必有的。編碼
數據類型spa |
轉換爲true的值指針 |
轉換爲false的值 |
Boolean |
true |
False |
String |
任何非空字符串 |
「」(空字符串) |
Number |
任何非零數字值(包括無窮大) |
0和NaN |
Object |
任何對象 |
null |
Undefined |
n/a(不適用) |
undefined |
若是是Boolean值,true和false將分別被轉換爲1和0;
若是是數字值,知識簡單的傳入和返回;
若是是null值,返回0;
若是是undefined,返回NaN。
若是字符串中只包含數字(包括前面帶正號或負號的狀況),則將其轉換爲十進制數值(前導的零被忽略);
若是字符串中包含有效的浮點格式,如「1.1」,則將其轉換爲對應的浮點數值(前導的零被忽略);
若是字符串中包含有效的十六進制格式,例如「0xf」,則將其轉換爲相同大小的十進制整數值;
若是字符串是空的(不包含任何字符),則將其轉換爲0;
若是字符串中包含除上述格式以外的字符,則將其轉換爲NaN。
字面量 |
含義 |
\n |
換行 |
\t |
指標 |
\b |
退格 |
\r |
回車 |
\f |
進紙 |
\\ |
斜槓 |
\’ |
單引號(’),在用單引號表示的字符串中使用,例如:’He said,\’hey.\’ ’ |
\」 |
雙引號(「),在用雙引號表示的字符串中使用,例如:」He said,\」hey.\」 」 |
\xnn |
以十六進制代碼nn表示一個字符(其中n爲0~F)。例如,\x41表示」A」 |
\unnn |
以十六進制代碼nnnn表示的一個Unicode字符(其中n爲0~F)。 |
若是值有toString( )方法,則調用該方法(沒有參數)並返回相應的結果;
若是值是null,則返回」null」;
若是值是undefined,則返回」undefined」。
Constructor:保存着用於建立當前對象的函數。
hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象實例中是否存在,其中,屬性名必須以字符串的形式指定,例如o.hasOwnProperty(「name」)。
isPrototypeOf(object):用於檢查對象是不是傳入對象的原型。
propertyIsEnumerable(propertyName):用於檢查給定的屬性是否可以使用for-in語句來枚舉。
toLoacleString( ):返回對象的字符串表示,該字符串與執行環境的地區對應。
toString( ):返回對象的字符串表示。
valueOf( ):返回對象的字符串、數值或布爾值表示。一般與toString( )方法的返回值相同。
在應用於一個包含有效數字字符的字符串時,先將其轉換爲數字值,再執行加減1的操做。字符串變量變成數值變量。
在應用於一個不包含有效數字字符的字符串時,將變量的值設爲NaN,字符串變量變爲數值變量。
在應用於布爾值false時,先將其轉換爲0再執行加減1的操做,布爾值變量變爲數值變量。
在應用於布爾值true時,先將其轉換爲1再執行加減1的操做,布爾值變量變成數值變量。
在應用於浮點數值時,執行加減1的操做。
在應用於對象時,先調用對象的valueOf( )方法,以取得一個可供操做的值,而後對該值應用前述規則,若是結果是NaN,則再調用toString( )方法後應用前述規則。對象變量變成數值變量。
若是操做數是一個對象,返回false;
若是操做數是一個空字符串,返回true;
若是操做數是一個非空字符串,返回false;
若是操做數是數值0,返回true;
若是操做數是任意非0數值(包括Infinity),返回false;
若是操做數是null,返回true;
若是操做數是NaN,返回true;
若是操做數是undefined,返回true。
若是第一個操做數是對象,則返回第二個操做數;
若是第二個操做數是對象,則只有在第一個操做數的求值結果爲true的狀況下才會返回該對象;
若是兩個操做數都是對象,則返回第二個操做數;
若是有一個操做數是null,則返回null;
若是有一個操做數是NaN,則返回NaN;
若是有一個操做數是undefined,則返回undefined。
邏輯與是短路操做,即若是第一個操做數可以決定結果,則不會對第二個操做數求值。
若是第一個操做數是對象,則返回第一個操做數;
若是第一個操做數的求值結果是false,則返回第二個操做數;
若是兩個操做數都是對象,則返回第一個操做數;
若是兩個操做數都是null,則返回null;
若是兩個操做數都是NaN,則返回NaN;
若是兩個操做數都是undefined,則返回undefined。
邏輯或也是短路操做。可利用邏輯或的這一行爲來避免爲變量賦null或undefined值。
若是操做數都是數值,執行常規的乘法計算。若是乘積超過了ECMAScript數值的表示範圍,則返回Infinity或-Infinity;
若是有一個操做數是NaN,則結果是NaN;
若是是Inifinity與0相乘,則結果是NaN;
若是是Inifinity與非0數值相乘,則結果是Infinity或-Infinity,取決於有符號操做數的符號;
若是有一個操做數不是數值,則在後臺調用Number( )將其轉換爲數值,而後再應用上面的規則。
若是操做數都是數值,執行常規的除法計算,若是商超過了ECMAScript數值的表示範圍,則返回Infinity或-Infinity;
若是有一個操做數是NaN,則結果是NaN;
若是是Infinity被Infinity除,則結果是NaN;
若是是零被領出,則結果是NaN;
若是是非零的有限數被零除,則結果是Infinity或-Infinity,取決於有符號操做數的符號;
若是是Infinity被任何非零數值除,則結果是Infinity或-Infinity,取決於有符號操做數的符號。
若是有一個操做數不是數值,則在後臺調用Number( )將其轉換爲數值,而後再應用以前的規則。
若是操做數都是數值,執行常規的除法計算,返回除得的餘數;
若是被除數是無窮大值而除數是有限大的數值,則結果返回NaN;
若是被除數是有限大的數值而除數是零,則結果是NaN;
若是是Infinity被Infinity除,則結果是NaN;
若是被除數是有限大的數值而除數是無窮大的數值,則結果是被除數;
若是被除數是零,則結果是零;
若是有一個操做數不是數值,則在後臺調用Number( )將其轉換爲數值,再應用以上規則。
若是有一個操做數是NaN,則結果是NaN;
若是是Infinity加Infinity,則結果是Infinity;
若是是-Infinity 加-Infinity,則結果是-Infinity;
若是是Infinity加-Infinity,則結果是NaN;
若是是+0加+0,則結果是+0;
若是是-0加-0,則結果是-0;
若是是+0加-0,則結果是+0;
若是有一個操做數是字符串,則應用如下規則:
若是兩個操做數都是字符串,則將第二個操做數與第一個操做數拼接起來;
若是隻有一個操做數是字符串,則將另外一個操做數轉換爲字符串,而後再將兩個字符串拼接起來。
若是有一個操做數是對象、數值或布爾值,則調用它們的toString( )方法取得相應的字符串值,而後再運用前面的關於字符串的規則。對於undefined和null,則分別調用String( )函數並取得字符串」undefined」和」null」。
若是兩個操做符都是數值,則執行常規的算術減法操做並返回結果;
若是有一個操做數是NaN,則結果是NaN;
若是是Infinity減Infinity,則結果是NaN;
若是是-Infinity減-Infinity,則結果是NaN;
若是是Infinity減-Infinity,則結果是Infinity;
若是是-Infinity減Infinity,則結果是-Infinity;
若是是+0減+0,則結果是+0;
若是是+0減-0,則結果是-0;
若是是-0減-0,則結果是+0;
若是有一個操做數是字符串、布爾值、null或undefined,則先在後臺調用Number( )函數將其轉換爲數值,而後再根據前面的規則執行減法計算。若是轉換的結果是NaN,則減法的結果就是NaN;
若是有一個操做數是對象,則調用對象的valueOf( )方法以取得表示該對象的數值。若是獲得的值是NaN,則減法的結果就是NaN。若是對象沒有valueOf( )方法,則調用其toString( )方法並將獲得的字符串轉換爲數值。
若是兩個操做數都是數值,則執行數值比較。
若是兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值;
若是一個操做數是數值,則將另外一個操做數轉換爲數值,而後執行數值比較;
若是一個操做數是對象,則調用這個對象的valueOf( )方法,用獲得的結果按照前面的規則比較,若無valueOf( )方法,則用toString( )方法,同上。
若是一個操做數是布爾值,則先將其轉換爲數值,而後再執行比較。
注意:任何操做數與NaN進行關係比較,結果都是false。
轉換不一樣的數據類型是,規則以下:
若是有一個操做數是布爾值,則在比較相等性以前先將其轉換爲數值——false轉換爲0,true轉換爲1;
若是一個操做數是字符串,另外一個操做數是數值,在比較相等性以前先將字符串轉換爲數值;
若是一個操做數是對象,另外一個操做數不是,則調用對象的valueOf( )方法,用獲得的基本類型值按照前面的規則進行比較。
兩個操做符在進行比較時則要遵循下列規則:
null和undefined是相等的。
要比較相等性以前,不能將null和undefined轉換爲其餘任何值。
若是有一個操做數是NaN,則相等操做符返回false,而不相等操做符返回true。即便兩個操做數都是NaN,相等操做符也返回false。
若是兩個操做數都是對象,則比較它們是否是同一個對象,若是都指向同一個對象,則相等操做符返回true,不然,返回false。
乘/賦值 (*=);
除/賦值 (/=);
模/賦值 (%=);
加/賦值 (+=);
減/賦值 (-=);
左移/賦值 (<<=);
有符號右移/賦值 (>>=);
無符號右移/賦值 (>>>=)。
for (property in expression) statement
在使用for-in循環以前,先檢測確認該對象的值不是null或undefined。
Label : statement
加標籤的語句通常都要與for語句等循環語句配合使用。
with (expression) statement
嚴格模式下,不容許使用with語句,不然將視爲語法錯誤。大量使用with語句會致使性能降低,也會給調試代碼形成困難,不建議在大型應用程序中使用。
不能把函數命名爲eval或arguments;
不能把參數命名爲eval或arguments;
不能出現兩個命名參數同名的狀況。
不然會致使語法錯誤,代碼沒法執行。