电竞比分网-中国电竞赛事及体育赛事平台

分享

【JavaWeb】80:js基礎(chǔ)詳解

 劉小愛(ài)v 2020-07-03

今天是劉小愛(ài)自學(xué)Java的第80天。

感謝你的觀看,謝謝你。

話不多說(shuō),開(kāi)始今天的學(xué)習(xí):

JavaScript是一門編程語(yǔ)言,但凡是編程語(yǔ)言,其在基本語(yǔ)法上都是大同小異的。

我們學(xué)了Java,那么再學(xué)習(xí)其它語(yǔ)言時(shí),學(xué)它不同于Java的地方即可,這樣也能更好地記憶。

一、js中的運(yùn)算符

1算術(shù)運(yùn)算符

無(wú)外乎就是加減乘除,取模,自增自減這些,用法和Java中都是一樣的。

但js中的運(yùn)算也有和Java的不同之處;

①變量之間的運(yùn)算

在js中,不同數(shù)據(jù)類型之間的變量也能運(yùn)算。

100和true相加結(jié)果竟然是101,這在Java中會(huì)直接報(bào)錯(cuò),因?yàn)椴淮_定結(jié)果是什么數(shù)據(jù)類型。

所以在js中,true參與運(yùn)算時(shí)就相當(dāng)于數(shù)字1,同理false就相當(dāng)于數(shù)字0,null也是相當(dāng)于數(shù)字0

②undefined類型參與運(yùn)算

變量c沒(méi)有定義,所以是未定義類型,當(dāng)其參與運(yùn)算時(shí)得到的結(jié)果為NaN。

未定義類型和非字符串任意類型運(yùn)算時(shí),得到的結(jié)果都是NaN。

NaN,全稱not a number,不是一個(gè)數(shù)字。

③string類型參與運(yùn)算

這個(gè)和Java中倒是一樣,任意類型和string類型相加時(shí),結(jié)果都是拼接。

但是String在Java里面是引用數(shù)據(jù)類型,而在js里面是基本(原始)數(shù)據(jù)類型。

2邏輯運(yùn)算

關(guān)于邏輯運(yùn)算符:與(&&)、或(||)、非(?。┖蚃ava中是一樣的。

但在js中的邏輯判斷與Java有些不同:

①布爾表達(dá)式

這個(gè)也就和Java中一樣,邏輯判斷為true時(shí)結(jié)果為真,邏輯判斷為false時(shí)結(jié)果為假。

②數(shù)字作為布爾表達(dá)式

在js里面,數(shù)字也有自己的邏輯判斷:

當(dāng)數(shù)字不為0時(shí),邏輯判斷為true;

當(dāng)數(shù)字為0時(shí),邏輯判斷為false。

③字符串作為布爾表達(dá)式

當(dāng)字符串不為空時(shí),邏輯判斷為true;

當(dāng)字符串為空時(shí),邏輯判斷為false。

此外,未定義數(shù)據(jù)類型邏輯判斷也為false,在算術(shù)運(yùn)算中的NaN作為邏輯判斷時(shí)也為false。

我就不一一演示了。

3比較運(yùn)算符

其中js中的賦值運(yùn)算符(=、+=、-=、*=、/=、%=)和Java中一樣。

比較運(yùn)算符(==、!=、<、<=、>、>=)也和Java中一樣,但js有兩個(gè)個(gè)特殊的比較運(yùn)算符:

①字符串與數(shù)字比較

在js中,字符串也能參與比較,會(huì)先將其轉(zhuǎn)換成數(shù)字再進(jìn)行比較。

  • ==,等于,比較的是值是否相等。

  • ===,恒等于,比較的是值和類型均相等。

②null與未定義比較

同樣的道理,它們的值相等,都為null,但是類型不一樣,所以不恒等于。

4三目運(yùn)算符

也就是Java中的三元運(yùn)算符。

二、js中的函數(shù)

1函數(shù)定義

js中的函數(shù)其實(shí)也就是Java中的方法。

①Java中的方法

做一個(gè)回顧,Java方法格式:修飾符+返回值+方法名+(參數(shù)列表)+{方法體};

其中參數(shù)列表中要明確數(shù)據(jù)類型。

②js中的函數(shù)

js函數(shù)格式:fuction+方法名(參數(shù)列表){};

js中不僅沒(méi)有修飾符,連返回值都沒(méi)有,并且參數(shù)列表的數(shù)據(jù)類型不用明確。

由此可以看出:js的語(yǔ)法相對(duì)于Java而言較為隨意,不像Java那么嚴(yán)謹(jǐn),但確實(shí)簡(jiǎn)便了很多。

2實(shí)參和形參

實(shí)參:調(diào)用函數(shù)時(shí)的參數(shù)(傳入的具體數(shù)值)。
形參:定義函數(shù)時(shí)的參數(shù)(自定義的變量)。

Java中形參與實(shí)參要明確保證一致(數(shù)量、數(shù)據(jù)類型都要保證一致)

但是js中可以不一致,我們逐一分析:

①實(shí)參與形參數(shù)量不一致

實(shí)參與形參的關(guān)系相當(dāng)于將實(shí)參的值賦給形參。

當(dāng)實(shí)參比形參要少時(shí):a=1;b=2,但是c未定義。

在js中任何數(shù)據(jù)與未定義的變量相加都是NaN。

當(dāng)實(shí)參和形參一樣或者多時(shí),結(jié)果沒(méi)有影響,多的實(shí)參不參與運(yùn)算即可。

②形參和方法體中的變量不一致

如果方法體中的變量要少,有幾個(gè)就用幾個(gè)。

如果方法體中的變量要多,多了一個(gè)形參中沒(méi)有的變量d,則無(wú)法運(yùn)行。

這個(gè)Java中倒是有一定的相似之處。

3參數(shù)arguments

事實(shí)上在js中有一個(gè)專門的數(shù)組arguments,用來(lái)接收調(diào)用時(shí)的實(shí)際參數(shù):

js中的數(shù)組是可變的,所以可以使用這種方式來(lái)接受,當(dāng)然也可以使用for循環(huán)來(lái)處理。

不過(guò)要注意的是,js中可沒(méi)有增強(qiáng)for循環(huán)。

老實(shí)說(shuō),對(duì)于arguments這個(gè)概念,其實(shí)也就相當(dāng)于是實(shí)際參數(shù),知道在js中有它的存在即可。

我個(gè)人對(duì)于實(shí)參和形參的理解,就是將實(shí)參賦值給形參再參與運(yùn)算,這樣方便記憶也好理解。

4返回值和方法重載

①返回值

js在定義函數(shù)時(shí)是不用說(shuō)明返回值的,如果有返回值,直接return即可。

②方法(函數(shù))重載

在Java中是有方法重載(同名不同參)

但是在js中是沒(méi)有方法重載的。

這也好理解,在Java中參數(shù)類型不同,個(gè)數(shù)不同即代表不同的參數(shù)。

但是在js中參數(shù)類型都沒(méi)有明確定義,所以也沒(méi)法區(qū)分參數(shù)不同,并且實(shí)參個(gè)數(shù)與形參個(gè)數(shù)沒(méi)有關(guān)系。

其中,js代碼是從上到下執(zhí)行的,同名函數(shù),后面的函數(shù)會(huì)覆蓋前面的函數(shù)。

5局部變量和全局變量

①函數(shù)內(nèi)測(cè)試局部變量

函數(shù)內(nèi)部,局部變量和全局變量都可以訪問(wèn)。

②函數(shù)外測(cè)試全局變量

在函數(shù)外部,局部變量是不能被訪問(wèn)的,但是全局變量可以訪問(wèn)。

③另一個(gè)script標(biāo)簽

和函數(shù)外部一樣的道理,通過(guò)②③我們可以得出結(jié)論:變量c是一個(gè)全局變量。

事實(shí)上,當(dāng)局部變量省略了var的時(shí)候,會(huì)變成全局變量。

為什么會(huì)這樣?畫(huà)圖分析:

也就是說(shuō)實(shí)際上變量c省略了var,就相當(dāng)于默認(rèn)在外部定義了var c,再在函數(shù)內(nèi)賦值。

當(dāng)然其前提是該變量沒(méi)有在函數(shù)內(nèi)被定義,如果變量c在函數(shù)內(nèi)定義過(guò)了,那它就是個(gè)局部變量。

④測(cè)試思考

我發(fā)現(xiàn)明明a,c都是全局變量,a,c中間加了一個(gè)b后,c就不能打印了。

也就是說(shuō)外部是沒(méi)法引用局部變量的,會(huì)報(bào)錯(cuò)。

但是js中報(bào)錯(cuò)了照樣能運(yùn)行,只是當(dāng)前標(biāo)簽內(nèi)后面的代碼就不執(zhí)行了。

最后

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多