星期日, 4月 08, 2007

Douglas Crockford的Javascript教學

投影片: http://yuiblog.com/assets/crockford/javascript.zip

影片

與C,C++,Java,C#等語言相較,Javascript的特殊之處有

  • Javascript是一個Functional Language
  • 只有一種浮點數字類別,沒有如int之類等其他數字類別。這個唯一的數字類別是
    IEEE-754浮點數標準,其大小為64 bits。
  • 雖然只有一種數字類別,但有一種特殊的數字「值」: NaN (Not a Number)。NaN與自己做等於、大於、小於運算的結果都是false。
  • 在C中,整數0為false,非0整數則被當成true。在Javascript中,此概念被擴大成:
    false, null, undefined, "" (空字串), 0, NaN 都被視為是false,不屬於這些的則都被視為true。
  • + 的怪用法: +"42" 會將字串"42"轉換成數字42。這種用法方便是方便,但,會不會太怪了些。
  • &&的怪用法,用來避免null reference:
    return a && a.member;

    等同於

    if (a) {
    return a.member;
    } else {
    return a;
    }
  • 的怪用法,用來設定預設值:

    var last = input nr_items;

    上式在input為falsy value時,會指定nr_items給last。
  • break到指定的階層(label)

    loop: for (;;) {
    ...
    if (...) {
    break loop;
    }
    ...
    }
  • 有類似C#中foreach的描述,但有點怪怪的

    for (var name in object) {
    if (object.hasOwnProperty(name)) {
    // within the loop,
    // name is the key of current member
    // object[name] is the current value
    }
    }



注意/建議事項

  • 使用parseInt將字串轉換成數字時,最好使用有兩個參數的版本,明確指定字串所表達數字是幾進位的。否則的話會出現 parseInt("08") ==> 0,只有parseInt("08", 10)能正確轉換成8。