js與java的一些區別

? ? ? ??本文需要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代碼的各種稀奇古怪的寫法了呢?

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 第一章: JS簡介 從當初簡單的語言,變成了現在能夠處理復雜計算和交互,擁有閉包、匿名函數, 甚至元編程等...
    LaBaby_閱讀 1,703評論 0 6
  • 第三章 類型、值和變量 1、存取字符串、數字或布爾值的屬性時創建的臨時對象稱做包裝對象,它只是偶爾用來區分字符串值...
    坤少卡卡閱讀 661評論 0 1
  • 她說我是從污水溝里抱來的 提起老屋,不可逃避的一處就是奶奶胡同頭前有一條污水溝,那可不是普通的小水溝...
    李baby閱讀 437評論 4 3
  • 小時候我喜歡涂涂畫畫對著漫畫書里的圖片模仿經常會為自己的作品充滿自豪 大一點的時候我喜歡收集黏貼紙還有抄寫自己喜歡...
    王小芳_DISC項目主理人閱讀 438評論 0 0