今天是劉小愛自學Java的第80天。web
感謝你的觀看,謝謝你。編程
話很少說,開始今天的學習:數組
JavaScript是一門編程語言,但凡是編程語言,其在基本語法上都是大同小異的。編程語言
咱們學了Java,那麼再學習其它語言時,學它不一樣於Java的地方便可,這樣也能更好地記憶。編輯器
好比加減乘除,取模,自增自減這些,和Java都是同樣的。函數
但js中的運算也有和Java的不一樣之處;學習
①變量之間的運算測試
在js中,不一樣數據類型之間的變量也能參與運算。flex
100和true相加結果居然是101,這個在Java中會直接報錯的,由於不肯定結果是什麼數據類型。url
因此在js中,true參與運算時就至關於數字1,同理false就至關於數字0,null也是至關於數字0
②undefined類型參與運算
變量c沒有定義,因此是未定義類型,當其參與運算時獲得的結果爲NaN。
未定義類型和非字符串任意類型運算時,獲得的結果都是NaN。
NaN,全稱not a number,也就是否是一個數字。
③string類型參與運算
這個和Java中卻是同樣,任意類型和string類型相加時,結果都是拼接。
可是String在Java裏面是引用數據類型,而在js裏面是基本(原始)數據類型。
關於邏輯運算符:與(&&)、或(||)、非(!)和Java中是同樣的。
但在js中的邏輯判斷與Java有些不一樣:
①布爾表達式
這個也就和Java中同樣,邏輯判斷爲true時結果爲真,邏輯判斷爲false時結果爲假。
②數字做爲布爾表達式
在js裏面,數字也有本身的邏輯判斷:
當數字不爲0時,邏輯判斷爲true;
當數字爲0時,邏輯判斷爲false。
③字符串做爲布爾表達式
當字符串不爲空時,邏輯判斷爲true;
當字符串爲空時,邏輯判斷爲false。
此外,未定義數據類型邏輯判斷也爲false,在算術運算中的NaN做爲邏輯判斷時也爲false。
我就不一一演示了。
其中js中的賦值運算符(=、+=、-=、*=、/=、%=)和Java中同樣。
比較運算符(==、!=、<、<=、>、>=)也和Java中同樣,但js有兩個個特殊的比較運算符:
①字符串與數字比較
在js中,字符串也能參與比較,會先將其轉換成數字再進行比較。
==,等於,比較的是值是否相等。
===,恆等於,比較的是值和類型均相等。
②null與未定義比較
一樣的道理,它們的值相等,都爲null,可是類型不同,因此不恆等於。
也就是Java中的三元運算符。
js中的函數其實也就是Java中的方法。
①Java中的方法
作一個回顧,Java方法格式:修飾符+返回值+方法名+(參數列表)+{方法體};
其中參數列表中要明確數據類型。
②js中的函數
js函數格式:fuction+方法名(參數列表){};
js中不只沒有修飾符,連返回值都沒有,而且參數列表的數據類型不用明確。
由此能夠看出:js的語法相對於Java而言較爲隨意,不像Java那麼嚴謹,但確實簡便了不少,方便學習。
Java中形參與實參要明確保證一致(數量、數據類型都要保證一致)
可是js中能夠不一致,咱們逐一分析:
①實參與形參數量不一致
實參與形參的關係至關於將實參的值賦給形參。
當實參比形參要少時:a=1;b=2,可是c未定義。
在js中任何數據與未定義的變量相加都是NaN。
當實參和形參同樣或者多時,結果沒有影響,多的實參不參與運算便可。
②形參和方法體中的變量不一致
若是方法體中的變量要少,有幾個就用幾個。
若是方法體中的變量要多,多了一個形參中沒有的變量d,則沒法運行。
這個Java中卻是有必定的類似之處。
事實上在js中有一個專門的數組arguments,用來接收調用時的實際參數:
js中的數組是可變的,因此可使用這種方式來接受,固然也可使用for循環來處理。
不過要注意的是,js中可沒有加強for循環。
老實說,對於arguments這個概念,其實也就至關因而實際參數,知道在js中有它的存在便可。
我我的對於實參和形參的理解,就是將實參賦值給形參再參與運算,這樣方便記憶也好理解。
①返回值
js在定義函數時是不用說明返回值的,若是有返回值,直接return便可。
②方法(函數)重載
在Java中是有方法重載(同名不一樣參)
可是在js中是沒有方法重載的。
這也好理解,在Java中參數類型不一樣,個數不一樣即表明不一樣的參數。
可是在js中參數類型都沒有明肯定義,因此也無法區分參數不一樣,而且實參個數與形參個數沒有關係。
其中,js代碼是從上到下執行的,同名函數,後面的函數會覆蓋前面的函數。
①函數內測試局部變量
函數內部,局部變量和全局變量均可以訪問。
②函數外測試全局變量
在函數外部,局部變量是不能被訪問的,可是全局變量能夠訪問。
③另外一個script標籤
和函數外部同樣的道理,經過②③咱們能夠得出結論:變量c是一個全局變量。
事實上,當局部變量省略了var的時候,會變成全局變量。
爲何會這樣?畫圖分析:
也就是說實際上變量c省略了var,就至關於默認在外部定義了var c,再在函數內賦值。
固然其前提是該變量沒有在函數內被定義,若是變量c在函數內定義過了,那它就是個局部變量。
④測試思考
我發現明明a,c都是全局變量,a,c中間加了一個b後,c就不能打印了。
也就是說外部是無法引用局部變量的,會報錯。
可是js中報錯了照樣能運行,只是當前標籤內後面的代碼就不執行了。
謝謝你的觀看。
若是能夠的話,麻煩幫忙點個贊,謝謝你。
本文使用 mdnice 排版