老鳥學Javascript - 第一彈

原文: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

clipboard.png

clipboard.png

來源:http://dorey.github.io/JavaSc...編程

用undefined和null來表示空值

簡單來講,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來填補這個值。

相關文章
相關標籤/搜索