原文:http://h01mes.com/veteran-new...javascript
我仍然記得在一個ajax小項目踩到跨域問題(CORS)的坑,最後用Chrome插件解決。由此對Javascript這個奇怪的語言留下很深的印象。如今,Javascript在先後端都取得很是大的影響力,已然成爲了全棧的同義詞。因此我決定認真搞一搞這個語言。順帶一提,跨域能夠用Moesif解決。html
本文不會討論初級的編程問題,好比if else,for循環,已經面向對象。若是您還不熟悉這些,請先出門左轉,網上有足夠多的資料討論這些大同小異的概念。java
本文主要關注一些離散的,即學即用的知識點,和一些在平常編程中容易踩得坑。git
==會對運算對象進行類型自動轉換,因此能夠認爲==等同於值比較。
===不作類型轉換,因此若是比較對象的類型不一致,===直接返回false。有些文章說===是引用比較,我的認爲並不許確。
例子:程序員
<html> <head> <script> //comparing string with number var res = "1" == 1; alert(res); res = "1" === 1; alert(res); //comparing two special type with the same value res = null == undefined; alert(res); res = null === undefined; alert(res); //comparing number with object var obj = new Number(123); res = 123 == obj alert(res) res = 123 === obj alert(res) </script> </head> <body> </body> </html>
運行結果是:github
true false true false true false
這裏,NaN === NaN 永遠是返回false。因此咱們只能用isNaN()來判斷NaN。web
===相似於其它語言的==;==則相似於equals()或其它相似函數。因此劃分這兩個等於符還有點意義。可是下面的這個劃分就徹底是怪異了。ajax
注:===和==的完整的行爲表chrome
來源:http://dorey.github.io/JavaSc...編程
簡單來講,undefined是由Javascript運行時默認賦值給變量的,而null則是由程序員來顯式賦值。當程序員給一個變量賦值爲null時,一般表示這個變量已經不用了。
更多例子:
<html> <head> <script> var res; alert(res); res = null; alert(res); </script> </head> <body> </body> </html>
運行結果:
undefined null
接下來,咱們來看看更多關於undefined 的例子:
<html> <head> <script> var res = [1,2,3]; alert(res[10]); function doSomething(first, second, optional) { alert(optional); } doSomething(1,2); </script> </head> <body> </body> </html>
運行結果:
undefined undefined
如今你能夠發現,若是一個變量沒有被顯式賦值,例如,數組越界訪問,或者訪問沒有被傳值的參數,javascript運行時會用undefined來填補這個值。