? ? ? ??本文需要5分鐘左右閱讀完成,建議收藏以后閱讀,里面都是干貨,可以親自試驗一下,如果覺得好用可以幫忙點贊轉發一下讓更多人看到,謝謝!交流學習java大數據可以加群460570824。
js的語法比java簡單,但是我總感覺js代碼看的很吃力,學的也很郁悶。現在買了本javascript權威指南,打算從頭學起。這里就順便當做筆記了。
程序設計首先得搞明白數據類型。js中有數字、布爾值、字符串、函數、對象、數組、null、undefined這幾種類型。
關于數字:
js的數字并不區別整型還是浮點型,js中所有數字都是浮點型表示,可以認為是其他語言中常用的double型。另外js能識別十六進制和八進制的直接量。如0xff(0x開頭為十六進制),0377(0開頭為八進制數,但是最好不要這么蛋疼的用)。通常咱無論整數還是浮點數都直接在js中用就ok。js還支持指數計數法表示的浮點型直接量,如6.02e23//e23就是10的23次方。數字除了支持—、+、*、/,js還有很多算數函數保存在Math對象中。
特殊的數值有Infinity無窮大,負無窮大則是-Infinity,還有NaN,意為非數值。可以用一個專門的函數isNaN()來檢測這個值。還有isInfinity();
關于字符串:
js支持Unicode字符,注意js沒有char類型,所有字符都是字符串。用""或者''括起來。如果字符串中包含"或者',注意使用\轉義。js字符串的內部特性之一就是支持+連接字符串。字符串有length屬性,還有charAt()方法。還有subString(start,end)方法,indexOf('')方法。
數字轉換成字符串:
當數字與字符串做+運算時,數字會轉換成字符串。如100+”萬"結果就是"100萬"。由此可以得出一個將數字轉化成字符串的簡便方法,如var n=100; n=n+'';則n就轉化成了字符串。''就是一個空字符串。其他的顯式轉換可以使用String(number)方法。還可以使用number.toString()方法,這個得是Number對象(似乎數字就是Number對象),該方法有參數,用來如2、8、16,表進制。還可以調用toFixed()方法格式化顯示數字。
字符串轉換成數字:
當字符串用于數字環境中時,它會自動轉換成數字。比如var n= '2' * '33'。則n的值為數字66。利用這個特點,將字符串轉數字的簡便方法就是var s='55';s=s-0;則s就變成了數字55。切記如果是給字符串+0,那么這個運算過程就是字符串連接,相當于+'0'。
要允許更靈活的轉換,可以使用parseInt()和parseFloat()。具體用法見書本p38.
布爾值:
沒什么好說的,true和false。關于布爾值的轉換,往往是自動轉換。用于數字環境,true為1,false為0。用于字符串環境,則true為'true',false為'false'。值得注意的是,如果一個數字用于布爾值環境,那么如果該數字是0或者NaN,它就轉成false,否則為true。而如果是字符串用于布爾值環境,則空字符串為false,非空為true。空值和未定義的值也會被轉成false,而任何非空對象、數組、或函數都轉換成true。
如果想顯式轉換,使用Boolean(x)函數。還有一種簡便方法是!!運算符。不解釋。
函數:
通常的定義方式為function square(x){
returnx*x;
}
得有個function關鍵字。有一點必須特別強調,在js中函數是真正的數值,它可以被存儲在變量、數組、對象中,而且函數還可以作為參數傳遞給其他函數。當函數被賦值給某個對象的屬性時,那么就等于該對象有了一個對應屬性名的方法。
關于方法與函數的區別,我自己粗陋的理解為類外面的叫函數,類里的叫方法。所以java沒有函數只有方法,因為java一切都在類里。而C和C++就有函數。
函數也可以有直接量,如:
var square=function(x){return x*x;}
這個特性比較重要。
還有一種蛋疼定義函數法:
var square =newFunction{"x","returnx*x"};//火星人喜歡這么用,地球人忘了它吧
對象:
js中的對象可以作為關聯數組使用。如果采用這種方式,那么訪問對象的屬性就要采取不同的語法。比如image.width,此時可以用image["width"]。
對象也有直接量,比如:
var point = {
x:2.3,y:-1.2};對象直接量也可以嵌套。最后要說明的是對象直接量使用的屬性值不必是常量,它可以是任意js表達式。而且對象直接量中的屬性名可以是字符串而不是標識符。哈哈這不就是json格式嗎?
對象轉換:
當非空對象用于布爾環境時,它自動轉換成true。當對象用于字符串環境,js會調用該對象的toString()方法,并且使用該函數的返回值。當對象用于數字環境,js首先調用該對象的valueOf()方法。如果該方法返回一個基本類型的值,則這個值會被使用。然而大多數情況下valueOf()返回的是對象自己,故js首先使用toString(),然后valueOf()。
數組:
js的數組可以存放任意js類型。包括其他數組、對象或者函數的引用。關聯數組與常規數組是有區別的,常規數組用數字下標,關聯數組則用字符串作下標。由于js是非類型語言,故數組中的元素類型不必一致。
數組聲明:var arr= new Array();然后可以單獨為每個元素賦值。也可以在聲明時賦值:new Array(1,'ok',3,true,{x:1,y:4});
js數組感覺就是java中數組與Arraylist的結合體。兼具兩者優點。
如果只向Array()構造函數傳遞一個參數,那么該參數是指定數組的長度。
數組也有直接量,比如:
var array =[1.2,'javascript',true,{x:1,y:2}];
數組亦可嵌套:
varmatrix=[[1,2,3],[4,5,6],[7,8,9]];雖然js不支持多維數組,但是這么一嵌套,就成了多維數組。而且js中數組直接量的元素不必僅限于常量,它可以是任意表達式:
var base=3;
var table=[base,base+1,base+2];
甚至你可以在數組中存放未定義的元素,比如var unkown=[1,,5];//2號元素就是未定義的
這么寬松的語法正是js令我頭痛之處啊,郁悶。當然這也是js強大之處。
null:
沒啥說的,當它處于bool環境時它被轉換成false,當用于數字環境時它被轉換成0;當用于字符串環境,它被轉換成'null'。
undefined:
js偶爾會用一下這個。在使用了一個并未聲明的變量時,或者使用了已經聲明但是沒有賦值的變量時,又或者使用了一個并不存在的對象屬性是,返回的就是undefined。注意它并不等同于null。但是==運算符卻將兩者看做相等。如果你想區分null和undefined,可以使用===運算符和typeof運算符。
undefined還有一點與null不同,null是js的保留字,而undefined不是。它是js的一個全局變量,它的初始值是undefined。
當用于布爾環境,false。用于數字環境,NaN。用于字符串環境,'undefined'。
js中也有Date對象。還支持正則表達式,RegExp對象,它支持直接量,一對斜線/這是正則表達式/之間的文本就是一個正則表達式直接量。js也有Error對象。
詳細的類型轉換對照表可以參考書本P47。
看到js的語法是如此的寬松,你是否想到了js代碼的各種稀奇古怪的寫法了呢?