標識符 即:變量、函數、屬性的名字,或者函數的參數。 格式規則:第一個字符必須是一個字母、下劃線或一個美元符號;其他字符可以是字母、下劃線、美元符號和數字;也可以包含ascii或unicode字母符號,但是不推薦。標識符采用駝峰大小寫格式如 firstSecond
注釋 單行注釋(//)和塊級注釋(/* */)
嚴格注釋 “use strict”;
語句 語句以分號結尾 ;
關鍵字、保留字
變量 var message ; 未初始化的變量會保存為一個特殊值 undefined 函數中使用var定義一個變量,那么這個變量在函數退出后就會被銷毀,在函數外不能訪問
數據類型 5種簡單數據類型(基本數據類型):Undefined ,Null, Boolean, Number, String .還有復雜數據類型 Object ,本質是無序的名值對
typeof 操作符 由于ECMAScript 為松散類型,因此需要有一種手段來檢測給定變量的數據類型 typeof ;使用typeof操作符返回值可能為 ——“undefined”–這個值未定義 ——“boolean”–這個值為布爾值 ——“string”–這個值為字符串 ——“number”–這個值是數字 ——“object”–這個值為對象或null ——“function”–這個值為函數
Undefined 類型 使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined 對于未初始化和未聲明的變量執行typeof操作符都會返回undefined值
Null類型 null值表示一個空對象指針,所以使用typeof操作符檢測null時會返回“object”;null == undefined (true); 無論什么時候,都沒有必要把一個變量的值顯示地設置為undefined,可是同樣的規則對于null不適用:只要保存對象的變量還沒有真正的保存對象,就應該明確的讓該對象保存null值,可以進一步區分null和undefined
Boolean類型 只有兩個字面值 true和false(區分大小寫,與數字不是一回事,true不一定等于1,false也不一定等于0) ECMAScript中的所有類型的值都與這兩個Boolean值等價的值。可以使用Boolean()轉型函數; 對應false : (String)“” ;(Number) 0 和NaN;(Object)null;(Undefined) undefined
Number類型 八進制字面量在嚴格模式下是無效的; 八進制字面值的第一位必須會0 十六進制字面值的前兩位必須是ox 浮點數值 必須含有小數點,且小數點后面必須至少有一個數值 由于保存浮點數值需要的內存空間是保存整數值的兩倍,因此ECMAScript會不失時機的將浮點數值轉換為整數值,如1.0 10. 浮點數值的最高精度是17位小數,但在進行算數計算時其精確度遠不如整數,如0.1+0.2 不是0.3,而是0.30000000000004,因此不要測試特定的浮點數值 if(a+b == 0.3){}
將不會得到正確結果 數值范圍 Number.MIN_VALUE Number.MAX_VALUE 如果超過該數值會轉化為特殊的Infinity值,-Infinity值,即正無窮,負無窮,該值將無法繼續參與下一次的計算,因為Infinity 不是能夠參與計算的數值,要判斷一個數值是不是又窮的,可以使用isFinite() 函數,若參數位于最大與最小數值之間會返回true; NaN 非數值(Not a Number),是一個特殊的值,表示一個本來要返回數值的操作數未返回數值的情況;任何數除以0會返回NaN,但不會影響代碼的執行(其他語言會停止代碼的執行) NaN 特點:任何實際NaN的操作都會返回NaN,NaN與任何值都不相等,包括NaN本身; isNaN()嘗試將接收的值轉換為數值,不能被轉換為數值的值都會導致這個函數返回true 數值轉換 Number()、parseInt()和parseFloat()將非數值轉換為數值 Number()可以用于任何數據類型,后兩個用于將字符串轉換為數值 number()轉化規則: 其中true false 轉換為1和0;null 返回 0 ; undefined 返回 NaN; 字符串時只包含數字(含浮點格式與十六進格式,但是八進制會被忽略,因為前導的0被忽略了),轉換為對應的數值;空字符串轉換為0;若含有上述以外的字符,將其轉換為NaN; 如果是對象,會調用valueOf()方法,然后按照前面規則轉換,如果結果為NaN,則調用toString()方法,再按照前面的規則轉換 Number()函數在轉換字符串時比較復雜且不合理,因此處理整數更常用parseInt()行數 parseInt()轉化規則 忽略空格;如果第一個字符不是數字符號或者負號,返回NaN,即空字符串會返回NaN;如果是數字,會解析完所有后續字符或者遇到一個非數字字符;如“1234blue”會被轉換為1234 “22.5”會被轉換為22,小數點不是有效的數字字符;并且可以辨別出 十進制 八進制 十六進制 ,超出進制則會返回NaN 如“0xz” 書中結果是ECMAScript 3 認為是56 八進制,ECMAScript 5 認為是0 十進制
但是在瀏覽器里測試后為 70(parseInt(“070”) ==》 70);因此一定要寫上第二個參數(任何時候):進制 parseFloat()轉化規則 “22.33.5” ==》22.33 從第一個字符開始解析每個字符,一直解析到字符串的末尾或者解析到遇到一個無效的浮點數字字符為止 字符串中第一個小數點有效,第二個無效,他后面的字符串將被忽略 parseFloat 始終忽略前導的0(即只解析十進制,不存在第二個參數);十六進制的字符串始終被轉換成0,
String類型 字符字面量 一些特殊的字符字面量,即轉義序列,用于表示非打印字符或其他用途的字符如/n 換行、/t 制表等; 字符串的長度 length屬性; 但是如果字符串中含有雙字節字符,那么length屬性可能不會精確地返回字符串的字符數目 字符串不可變,要改變某個變量保存的字符串,首先銷毀原來的字符串,然后再用另一個包含新值的字符串填充該變量 轉換為字符串 toString()方法,該方法會返回相應值的字符串表現 數值、布爾值、對象、字符串都有該方法,但是null和undefined沒有。 toString()可以傳入參數:輸出數值的基數,默認為十進制 String()方法,轉型函數,能將任何類型的值轉換為字符串(過程為如果有toString()方法,則調用該方法,如果值為null,則返回’null’,如果值是undefined,則返回”undefined”) 要把某個值轉換為字符串,可以使用加號操作符把他與字符串(“”)加在一起
Object類型 var o = new Object(); 對象:一組數據和功能的集合 Object每個實例都具有下列屬性和方法 Constructor :保存的創建當前對象的函數,對上面的例子就是Object( hasOwnPRoperty(propertyName):用于檢查給定的屬性在當前實例是否存在,入參為字符串 isPrototypeOf(object):用于檢查傳入對象是否是另一個對象的原型 propertyIsEnumerable(propertyName):用于檢查給定屬性是否能夠使用for-in語句枚舉,入參為字符串 toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應 toString():返回對象的字符串表示 valueOf():返回對象的字符串、數值或布爾值表示,通常與toString()方法返回值相同 但是瀏覽器的環境對象,如BOM和DOM中的對象,都屬于宿主對象,是由宿主實現提供和定義的,可能不會繼承Object
操作符 能使用于字符串、數字值、布爾值、甚至對象,應用于對象時,會調用對象的valueOf()或toString()方法,以便取得可以操作的值 一元操作符 有遞減和遞增操作符:前置和后置型; 前置時變量的值在語句求值以前改變的,前置操作和執行語句的優先級相等,整個語句會從左至右被求值;后置時變量的值在語句求值以后才改變; 應用于字符串時,google測試結果為必須是全部是有效數字字符的字符串,才會轉換為數字,否則為NaN 一元加和減操作符 一元加操作符放在數值前面,對數值不會產生任何影響,不過對非數值應用一元加操作符時,該操作符會像Number()一樣對該值轉換 一元減操作符應用于數值時,該值會變成負值;應用于非數值時,規則如一元加操作符,最后將得到的數值轉換為負數 位操作符 按照內存中的位來操作數值,ECMAScript中數值 都是以64位格式存儲,但位操作符并不直接操作64位的值,而是先將64位的值轉換為32位的整數,然后執行操作,最后將結果轉換回64位 有符號的整數:前31位表示整數的值,第32位表示數值的負號,0為正數,1為負數 負數為二進制補碼:步奏如下: 求這個值絕對值的二進制碼;求二進制的反碼,0—>1;得到的二進制反碼加1 但是ECMAScript會隱藏這些信息,我們調用toString(2)時,返回的是這個負數絕對值的二進制碼前面加上了一個負號 對NaN和Infinity 應用位操作時,會被當成0處理;對于非數值應用位操作符時,會先使用Number()將其轉換為一個數值,在應用位操作 按位非(NOT) 符號:~;本質:操作數的負號減1;由于按位非是數值的最底層操作,速度更快 按位與(AND) 符號:&; 本質:兩個數值的每一位對其,相同位置上的兩個數執行AND操作;都是1才是1 按位或(OR) 符號:|;都是0才是0 按位異或(XOR) 符號:^ 兩個數值的對應位上只有一個1才返回1, 左移 符號:<< 空位補0;左移不會影響符號位 有符號的右移 符號:>> 空位補0;右移不會影響符號位 無符號右移 符號:>>> 對正數來說,與有符號的右移結果相同; 對負數來說,影響較大
布爾操作符 有三個:非(NOT)、與(AND)、或(OR) 邏輯非 符號:!;規則為 對象=>false;空字符串=>true;非空字符串=>false;0=>true;非0數值=>false;null、NaN、undefined=>true; ?。。╲alueBoolean) 與Boolean()方法一致 邏輯與 符號:&& 邏輯與操作可以用于任何類型的操作數。在有一個操作符不是布爾值的時候,邏輯與操作就不一定返回布爾值;規則如下: 第一個操作數是對象,返回第二個操作數; 第二個是對象,只有在第一個操作數的求值結果為true才能返回該對象 兩個都是對象,返回第二個操作數 第一個為null、NaN、undefined時,返回第一個
為短路操作,第一個能決定結果時,不會對第二個操作數求值;不能再邏輯與操作中使用未定義的值 邏輯或 符號:|| 求值規則: 如果第一個操作數是對象,返回第一個操作數 第一個操作數求值結果為false,返回第二個操作數 如果兩個都是對象,返回第一個操作數 如果兩個都是null,或NaN或undefined,則返回null或NaN或undefined
也是短路操作,因此var myObject = preferredObject || backupObject; 有一個默認值:backupObject;
乘性操作符 有乘法、除法和求模;如果參與乘法計算的某個操作符不是數值,會先使用Number()轉型函數將其轉換為數值 乘法 符號:* 規則如下: 都是數值,執行常規乘法計算:兩個正數或負數相乘還是正數,只有一個有符號,結果就是負數,超出ECMAScript數值范圍,返回Infinity 或-Infinity 如果一個是NaN,結果為NaN;如果Infinity與0相乘,結果是NaN;Infinity與非0相乘,結果為Infinity或-Infinity,取決于有符號操作數的符號; infinity與infinity相乘,結果是infinity;如果有一個操作數不是數值,則后臺調用Number()將其轉換為數值 除法 符號:/ 規則如下: 都是數值,執行常規除法計算:兩個正數或負數相乘還是正數,只有一個有符號,結果就是負數,超出ECMAScript數值范圍,返回Infinity 或-Infinity 如果一個是NaN,結果為NaN; infinity與infinity相除,結果是NaN;0/0 結果是NaN;如果非0的有限數被0除,結果是Infinity或-Infinity,取決有符號操作數的符號;如果是Infinity被任何非零除,則結果為Infinity或-Infinity,取決于有符號操作數的符號 如果有一個操作數不是數值,則后臺調用Number()將其轉換為數值 求模 符號:% ;求余 規則如下: 被除數是無窮大而除數是有限大的數值,則結果是NaN; 被除數是有限大而除數是0,結果是NaN; Infinity除以Infinity,結果是NaN; 被除數是有限大數值而除數是無窮大的數值,結果為被除數 被除數為0,結果為0;除數為0,結果為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,結果為NaNInfinity減Infinity,結果為NaN-Infinity減-Infinity,結果為NaNInfinity減-Infinity,結果為Infinity-Infinity減Infinity,結果為-Infinity+0減+0 結果+0;+0減-0,結果-0;-0減-0,結果+0如果一個為字符串、布爾值、null或undefined,先在后臺調用Number()轉換為數值,在執行前面的規則如果一個操作數是對象,調用valueOf()以取得表示該對象的數值,如果得到NaN,則結果為NaN,沒有valueOf()方法,則調用toString()方法并將得到的字符串轉換為數值關系操作符 < > <= >= 規則如下
兩個操作數都是數值,執行數值比較兩個操作數都是字符串,比較兩個字符串對應的字符編碼值一個為數值,將另一個轉為數值,再執行比較一個為對象,調用valueOf()方法,再按照前面的規則執行比較,如果沒有valueOf()方法, 則調用toString()方法,并執行前面比較一個為布爾值,轉換為數值,在執行比較 “23”< 3 false; “23”<”3” true; “a” < 3 false; a 被轉化為NaN,任何數與NaN進行比較,結果都是false;相等操作符 相等和不相等——先轉換再比較;全等和不全等——僅比較而不轉換 相等和不相等 符號: == 和 != 先轉換操作數,在比較相等性;規則如下:
有一個是布爾值,比較之前先轉換為數值,false轉換為0,true轉換為1如果一個為字符串,一個為數值,比較前先將字符串轉換為數值一個為對象,一個不是,先將對象調用valueOf()方法,在按照前面規則進行null和undefined是相等的比較之前,不能將null和undefined轉換成其他任何值一個操作數為NaN,相等操作符返回false,不相等,返回true;NaN == NaN fasle都為對象,比較是否是同一對象,只想同一對象,返回true,否則為false全等和不全等 符號 === 和!== 規則:
比較之前不轉換操作數null === undefined false 不是一個類型條件操作符 即三木運算符 var variable = boolean_expression ? true_value :false_value;
賦值運算符 符號有: = 右側的值賦給左側的變量;復合賦值 ,等號前面添加 乘性操作符、加性操作符、位操作符
逗號運算符 在一條語句中執行多個操作如 var num1 = 1,num2=2,num3=3; 上面是聲明多個變量,除此之外逗號操作符還可以用于賦值,逗號操作符總會返回表達式的最后一項var num = (1,2,3,4,5)// num的值為5,最后一項
新聞熱點
疑難解答