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