淺談Java和JavaScript中變量和數(shù)據(jù)類型的區(qū)別

對于一門編程語言的學(xué)習(xí)焚刚,如果第一步是安裝環(huán)境巡蘸,那么第二步一定是學(xué)習(xí)這門語言的基本規(guī)則咐蚯,變量和數(shù)據(jù)類型則首當(dāng)其沖
JavaScipt作為一個(gè)蹭Java熱度而命名的語言健无,在很多方面和Java也有一定的相似之處
所以在我決定整理復(fù)習(xí)Java知識的時(shí)候旬迹,我希望通過一篇對比的文章火惊,來順便復(fù)習(xí)一下JavaScipt

當(dāng)然還有一個(gè)理由就是,純寫Java或者純寫JavaScipt的文章奔垦,很多人都做過了屹耐,再寫著實(shí)沒什么意思 :)

設(shè)計(jì)區(qū)別

  1. Java是一種完全面向?qū)ο蟮木幊陶Z言,想要運(yùn)用Java寫東西就必須先設(shè)計(jì)對象椿猎;
    而JavaScript不一樣惶岭,它是基于對象的一種腳本語言,它為開發(fā)者自帶提供了很多內(nèi)部對象犯眠,要更為簡易省時(shí)
  2. Java采用靜態(tài)聯(lián)編按灶,Java的對象引用必須在編譯時(shí)就進(jìn)行,編譯器需要實(shí)現(xiàn)強(qiáng)類型檢查筐咧;
    而JavaScript不同鸯旁,它采用動(dòng)態(tài)聯(lián)編,它的對象引用可以在運(yùn)行時(shí)檢查
  3. 它們最本質(zhì)的不同就是用途量蕊,Java目前被廣泛應(yīng)用于PC端铺罢、手機(jī)端、互聯(lián)網(wǎng)危融、數(shù)據(jù)中心等等畏铆;
    而JavaScript則被主要用于嵌入文本到HTML頁面,讀寫HTML元素吉殃,控制cookies等
  4. 設(shè)計(jì)區(qū)別中的內(nèi)容參考了這篇博文 —— Java跟JavaScript兩者間的關(guān)系和區(qū)別

關(guān)于變量

  1. 不同之處
    • 在Java中辞居,因?yàn)槠鋸?qiáng)類型語言的特性楷怒,聲明變量需要明確該變量的類型,內(nèi)存管理系統(tǒng)根據(jù)變量的類型為變量分配存儲空間
    • 在JavaScript中瓦灶,聲明變量不需要指定變量類型鸠删,只需使用var關(guān)鍵字;
      不過在ES6的后續(xù)計(jì)劃中贼陶,添加了letconst兩個(gè)關(guān)鍵字用于聲明不同作用的變量刃泡,但是依舊不需要聲明變量類型
    • 而且JavaScipt中的變量可以存儲其他類型的變量的值,但是在Java中則有明確的類型要求碉怔,不過部分可以通過類型轉(zhuǎn)換來存儲其他類型的值
    • 值得一提的是烘贴,雖然JavaScript不要求聲明變量類型,但是可以通過new關(guān)鍵字來聲明其類型
  2. 相同之處
    • 變量是用于存儲信息的容器撮胧,所以他們都是需要申請內(nèi)存來存儲值桨踪,通過變量名可以引用值,也可以修改變量名的值
    • 都是等號右邊賦值給等號左邊 :)
    • 命名規(guī)則基本一致芹啥,具體參考下面的文章 Java和JavaScript命名規(guī)則
    • ++a代表取++運(yùn)算之后的值锻离,a++表示取++運(yùn)算之前的值

<span id="jumpId-NameType"></span>

Java和JavaScript命名規(guī)則

  1. 變量命名必須以字母、下劃線_或者$為開頭墓怀,其他字符可以是字母汽纠、_$或數(shù)字
  2. 變量名中不允許使用空格和其他標(biāo)點(diǎn)符號傀履,首個(gè)字不能為數(shù)字虱朵,參考第一條
  3. 變量名長度不能超過255個(gè)字符注意!!!這是JavaScript的規(guī)則,Java參考各個(gè)類型的大小范圍
  4. 變量名區(qū)分大小寫钓账,建議駝峰命名法
  5. 變量名必須放在同一行中
  6. 不能使用關(guān)鍵字卧秘,分別具體是哪些自行百度
  7. 參考博文

關(guān)于數(shù)據(jù)類型

  1. 不同之處
  2. 相同之處
    • 在Java和JavaScript中都分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩種

<span id="jumpId-JavaType"></span>

Java數(shù)據(jù)類型

  1. 基本數(shù)據(jù)類型
    • 8種基本類型,注意!!!下面括號是默認(rèn)值
    • 6種數(shù)字類型羞福,其中4個(gè)整數(shù)型byte(0b)&short(0s)&int(0)&long(0L)惕蹄,2個(gè)浮點(diǎn)型float(0.0f)&double(0.0d)
    • 1種字符類型char(無默認(rèn)值,大小范圍是\u0000-\uffff治专,等效十進(jìn)制0~65535)卖陵,
      關(guān)于char值需要提一句的是,字符A的十進(jìn)制值是65张峰,字符a的十進(jìn)制值是97泪蔫,后續(xù)字母依次每個(gè)加一,
      有個(gè)概念叫ascii碼有興趣的可以深入了解下
    • 1種布爾類型boolean(false)
    • 注意!!!數(shù)字類型的結(jié)尾字母不需要考慮大小寫喘批,都可以
    • 在計(jì)算機(jī)中負(fù)數(shù)由補(bǔ)碼進(jìn)行表示撩荣,補(bǔ)碼 = 源碼取反 + 1铣揉,舉個(gè)例子:
      22,在計(jì)算機(jī)中的表示為:00010110餐曹;-22逛拱,取反:11101001,加1:11101010
  2. 引用數(shù)據(jù)類型
    • String台猴、對象朽合、數(shù)組、類饱狂、接口 & .etc
    • 所有引用類型的默認(rèn)值都是null
    • 一個(gè)引用變量可以用來引用任何與之兼容的類型

<span id="jumpId-JsType"></span>

JavaScript數(shù)據(jù)類型

  1. 基本數(shù)據(jù)類型
    • 字符串 String曹步,單引號雙引號包裹都可以
    • 數(shù)字 Number,不分整數(shù)和小數(shù)休讳,說實(shí)話這點(diǎn)寫起來比Java爽讲婚,但是會有危險(xiǎn) :)
    • 布爾 Booleantrue/false
    • Null衍腥,可以將變量值設(shè)置為null來清空值
    • 未定義 Undefined磺樱,表示變量不含有值
    • Symbol,ES6中添加的新類型
  2. 引用數(shù)據(jù)類型
    • 對象 Object婆咸,由花括號分隔竹捉,在括號內(nèi)部,對象的屬性以名稱和值對的形式name:value來定義尚骄,屬性由逗號分隔
    • 數(shù)組 Array块差,new一個(gè)或者直接賦值(隱式創(chuàng)建)
    • 日期 Date,主要是日期時(shí)間的一些操作倔丈,不過日常工作中習(xí)慣用momentjs處理日期和時(shí)間
  3. 需要注意的一點(diǎn)
    • JavaScript中的類型是針對值來說憨闰,而不是針對變量

<span id="jumpId-JavaTypeChange"></span>

Java中的類型轉(zhuǎn)換規(guī)則

  1. 隱式(默認(rèn))類型轉(zhuǎn)換
    • 基本類型的默認(rèn)轉(zhuǎn)換規(guī)則 byte/short/char -> int -> long -> float -> double
    • 當(dāng)byte/short/char相互之間不能轉(zhuǎn)換,它們參與運(yùn)算首先將轉(zhuǎn)換成int類型再進(jìn)行運(yùn)算
    • 數(shù)字和字符串相加需五,數(shù)字會自動(dòng)裝換成字符串
  2. 顯示(強(qiáng)制)類型轉(zhuǎn)換
    • 目標(biāo)類型 變量名 = (目標(biāo)類型)被轉(zhuǎn)換的類型
    • 容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型時(shí)鹉动,要加上強(qiáng)制轉(zhuǎn)換符,但可能造成精度降低或溢出
    • 有多種類型的數(shù)據(jù)混合運(yùn)算時(shí)宏邮,系統(tǒng)首先自動(dòng)的將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那一種數(shù)據(jù)類型泽示,然后再進(jìn)行計(jì)算
  3. 有趣的例子
    • 提問:Java是如何處理強(qiáng)制類型轉(zhuǎn)換的溢出處理呢?
    • byte a = (byte)130
    • 答:在計(jì)算機(jī)中蜜氨,所有的數(shù)據(jù)都是存儲的補(bǔ)碼形式械筛,那么130首先被當(dāng)成int型存儲,四個(gè)字節(jié)32位飒炎,
      它的補(bǔ)碼如下:0000 0000 0000 0000 0000 0000 1000 0010埋哟,轉(zhuǎn)換為byte類型,進(jìn)行截取郎汪,
      高字節(jié)部分去除赤赊,保留低字節(jié)部分闯狱,得到轉(zhuǎn)換為byte類型的補(bǔ)碼為:1000 0010
      我們將其轉(zhuǎn)換為源碼:補(bǔ)碼(1000 0010)-> 反碼(1000 0001)-> 原碼(1111 1110)為 -126砍鸠,所以最后的答案是-126
    • 參考資料

<span id="jumpId-JsTypeChange"></span>

JavaScript中的類型轉(zhuǎn)換規(guī)則

JavaScript是弱類型語言扩氢,變量類型完全由當(dāng)前值決定,這種類型就叫弱類型爷辱。
首先要記住的是录豺,JavaScript中的類型轉(zhuǎn)化,它得到的結(jié)果永遠(yuǎn)是基本類型饭弓,也就可以分為兩種情況双饥,
基本類型和基本類型之間的轉(zhuǎn)化,引用類型轉(zhuǎn)化為基本類型弟断,不可能出現(xiàn)基本類型轉(zhuǎn)化為引用類型咏花,
類型轉(zhuǎn)化出現(xiàn)最多就是轉(zhuǎn)化成Number, String, 和Boolean

Java中的主動(dòng)類型轉(zhuǎn)換常用方法

這里感覺可以另外寫一個(gè)專題博文,后期再補(bǔ)檔阀趴,到時(shí)候再補(bǔ)個(gè)鏈接過來昏翰,有興趣的同學(xué)可以先閱讀這篇文章

JavaScript中的主動(dòng)類型轉(zhuǎn)換常用方法

  1. 將其他類型值(數(shù)字、布爾刘急、日期)轉(zhuǎn)字符串棚菊,一把都是用toString()
  2. 字符串轉(zhuǎn)數(shù)字,parseInt()轉(zhuǎn)換成整數(shù)叔汁,parseFloat()轉(zhuǎn)換成浮點(diǎn)數(shù)统求,整數(shù)和浮點(diǎn)數(shù)都是Number類型
  3. 將布爾轉(zhuǎn)換成數(shù)字可以使用方法Number()
  4. 當(dāng)JavaScript嘗試操作一個(gè)錯(cuò)誤的數(shù)據(jù)類型時(shí),會自動(dòng)轉(zhuǎn)換為正確的數(shù)據(jù)類型
    • 舉個(gè)例子:5 + null // 返回?cái)?shù)字5据块,null 轉(zhuǎn)換為 0
    • 舉個(gè)例子:'5' + null // 返回字符串5null码邻,null 轉(zhuǎn)換為 'null'
    • 其他例子就是字符串類型數(shù)字和數(shù)字類型數(shù)字之間的運(yùn)算都會轉(zhuǎn)成數(shù)字運(yùn)算
  5. 將其他類型值轉(zhuǎn)換成布爾值類型
    • 原始類型值轉(zhuǎn)換方法,這六個(gè)類型undefined/null/-0/0/NaN/空字符串全部為false另假,其他全部為true
    • 所有對象的布爾值都是true像屋,甚至false對應(yīng)的布爾值對象也是true,空對象空數(shù)組也都是true
    • 舉個(gè)例子:console.log(Boolean(new Boolean(false))) // 輸出true
  6. 隱式類型的轉(zhuǎn)換是系統(tǒng)進(jìn)行運(yùn)算時(shí)自動(dòng)進(jìn)行的边篮,但是調(diào)用的方法都是顯式類型轉(zhuǎn)換的方法
    • 一元運(yùn)算符+可以隱式的將字符串轉(zhuǎn)為數(shù)字开睡,如果變量不能轉(zhuǎn)換成數(shù)字,他仍會成為一個(gè)數(shù)字苟耻,但值會是NaN
      舉個(gè)例子:var a = 5; console.log(c = +a); // 輸出數(shù)字5扶檐,
      舉個(gè)例子:var b = 'abc'; console.log(b = +abc); // 輸出NaN
    • - * / %(減號凶杖、乘號、除號款筑、取余運(yùn)算符)運(yùn)算時(shí)會通過Number()把數(shù)據(jù)轉(zhuǎn)換成Number類型后智蝠,再進(jìn)行運(yùn)算
    • && || !(與或非運(yùn)算符)運(yùn)算時(shí)會通過Boolean()把數(shù)據(jù)轉(zhuǎn)換成Boolean類型后腾么,再進(jìn)行運(yùn)算
    • < > <= >= == !=(比較運(yùn)算符)運(yùn)算時(shí),當(dāng)數(shù)字和字符串比較大小時(shí)杈湾,會隱示將字符串轉(zhuǎn)換成Number類型進(jìn)行比較解虱,
      而當(dāng)字符串和字符串比較大小時(shí),則比較的是ascii碼的大小漆撞,最后返回的則是布爾值
    • 注意!!!比較運(yùn)算符中undefinednull是不會發(fā)生類型轉(zhuǎn)換的殴泰,只有相等的值會返回true
    • 注意!!! 全局isNaN()函數(shù)會將測試值通過Number()轉(zhuǎn)換為數(shù)字,然后對其進(jìn)行測試浮驳,
      但是Number.isNaN()不會將值轉(zhuǎn)換為數(shù)字悍汛,并且不會為任何非數(shù)字類型的值返回true
  7. 如果用==來判斷兩個(gè)數(shù)值是否相等,由于會發(fā)生隱式類型轉(zhuǎn)換至会,所以是非常存在非常大的漏洞的离咐,
    為了解決這一問題,引入了===(絕對等于)和!==(絕對不等于)
  8. 參考資料一奉件、參考資料二

我是 fx67ll.com宵蛀,如果您發(fā)現(xiàn)本文有什么錯(cuò)誤,歡迎在評論區(qū)討論指正县貌,感謝您的閱讀术陶!
如果您喜歡這篇文章,歡迎訪問我的 本文github倉庫地址窃这,為我點(diǎn)一顆Star瞳别,Thanks~ :)
轉(zhuǎn)發(fā)請注明參考文章地址,非常感謝:脊ァK盍病!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兆解,一起剝皮案震驚了整個(gè)濱河市馆铁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅睛,老刑警劉巖埠巨,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異现拒,居然都是意外死亡辣垒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門印蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勋桶,“玉大人,你說我怎么就攤上這事±裕” “怎么了捐韩?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹃锈。 經(jīng)常有香客問我荤胁,道長,這世上最難降的妖魔是什么屎债? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任仅政,我火速辦了婚禮,結(jié)果婚禮上扔茅,老公的妹妹穿的比我還像新娘已旧。我一直安慰自己,他們只是感情好召娜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布运褪。 她就那樣靜靜地躺著,像睡著了一般玖瘸。 火紅的嫁衣襯著肌膚如雪秸讹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天雅倒,我揣著相機(jī)與錄音璃诀,去河邊找鬼。 笑死蔑匣,一個(gè)胖子當(dāng)著我的面吹牛劣欢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裁良,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凿将,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了价脾?” 一聲冷哼從身側(cè)響起牧抵,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侨把,沒想到半個(gè)月后犀变,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秋柄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年获枝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇笔。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡映琳,死狀恐怖机隙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萨西,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布旭旭,位于F島的核電站谎脯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏持寄。R本人自食惡果不足惜源梭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稍味。 院中可真熱鬧废麻,春花似錦、人聲如沸模庐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掂碱。三九已至怜姿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疼燥,已是汗流浹背沧卢。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醉者,地道東北人但狭。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像撬即,于是被迫代替她去往敵國和親立磁。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容