iT邦幫忙

9

javascript的範例學習:以jQuery為例(二)

這陣子看jQuery的source,
大慨是自己孤陋寡聞,總以為js是一個老語言,可是不少語法讓一個一4gl程式維護為業的IT從業人員陌生,
舉幾例:(也證明筆者是js門外漢)

  1. undefined
    這是js保留字,初看到,以為是自定義的全域常數,CONSTANT ,或是#define,#undefine 巨集,google一下,
    原來是保留字。馬上練習一下。
    LAB1-1:

    var tim

    typeof tim
    "undefined" //宣告變數不用給定型別
    tim = 'Good Man'
    typeof tim
    "string" //給定一個字串時的型別
    tim = null

    typeof tim
    "object" //給null時候的型別

    tim = 41
    typeof tim
    "number" //給數字

LAB1-2:

undefined == null
true

網上中文解說文章不少。
這裡小結一下:宣告變數沒給值時,是undefined,給值後,就是值的型別。
null是一個型別,型別為object. 如上例練習。把null塞給一個變數,這變數就換成object型別,再給變數塞一個數字,變成number型別。
大部分語言,宣告時,就決定型別,如4gl, define mystr,mychar varchar(10),
js 把宣告和指定型別拆成兩件事,
宣告時沒給值,此時是undefied,隨著給的值不同,變數可一直變動型別。

小結也結太長了。

在chrome或firebug的JS console里,都有console来练小程式,笔者觉得非常方便,邦友們也這麼認為吧
2.===
jQuery里,到处可见===,显然不是笔误(尤其是以高品质著称,全球上百雙眼盯着的类别库),google一下,
和==有那里不同,练习一下。
LAB2-1:

"abc" == new String("abc")
true
"abc" === new String("abc")
false

LAB2-2:

true == '1'
true
true == 1
true
'2' == 2
true
true === 1
false
'2' === 2
false

抄自stack overflow 的例子http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use
從這些淺顯的例子,筆者覺得js為了把很多語義上的問題,定義的更嚴謹。
不少程式語言,在比較時,都會自動轉型後再來比,===的出現,請不要轉型,直接比較。
有人說這叫識別(Identity (===. !==)),如http://www.c-point.com/javascript\_tutorial/jsgrpComparison.htm
所述,These operators behave identically to the equality operators except no type conversion is done, and the types must be the same to be considered equal.
型別不能轉換,型別必須相符,歡迎其他網友補充。

3.!==,同上,显然不是笔误,
马上练习一下。
摘自泰大最愛的 w3schoolshttp://www.w3schools.com/js/js\_comparisons.asp
LAB3-1:

x=5
5
x != '5'
false
x !== '5'
true
x !==5
false

如 ==,!=也會先轉換再來比,所以例子中,把'5'轉換成5,用!=來比較時,是false, 而!==來比較是true,
在jQuery中也用很多!

  1. typeof 出現在前面的例子。
    在jQuery中也用很多,不知道是不是因為弱型別的關係,感覺弱型別的語言,變數的型別可以換來換去,反而要常用
    typeof取出變數目前的型別。下一刻可能又換了型別

PS:今天的台中,下雨前的悶熱,讓我短袖衣服換個不停,汗流不停,終於在4點半下了大雨
,大雨之前的打雷聲,把筆者嚇到了。希望這場大雨不會釀災,而美國還在史上最大的旱災呢。


0
timloo
iT邦研究生 2 級 ‧ 2012-07-21 16:59:03

快速的把泰大的影片,流覽了一下,
更詳盡的內容可參考
http://ithelp.ithome.com.tw/question/10095031
不過泰大主要把**!==** **===**放在討論裏,
cdfu大提醒的,可見這個比較子的差異,大家覺得重要。

結果還是重覆了別人。這次看過泰大的影片,會比較避免這類情況的發生。

0
ted99tw
iT邦高手 1 級 ‧ 2012-07-21 18:54:08

謝謝Tim的好文......推!

一點好奇的是,文中出現少許簡體字......是用羅馬拼音或五筆輸入法的關係嗎?疑惑

0
timloo
iT邦研究生 2 級 ‧ 2012-07-25 22:45:17

之前沒裝嘸蝦米,只裝了大陸拼音,打簡體字,再轉繁體字,沒轉好,SORRY

我要留言

立即登入留言