這陣子看jQuery的source,
大慨是自己孤陋寡聞,總以為js是一個老語言,可是不少語法讓一個一4gl程式維護為業的IT從業人員陌生,
舉幾例:(也證明筆者是js門外漢)
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中也用很多!
PS:今天的台中,下雨前的悶熱,讓我短袖衣服換個不停,汗流不停,終於在4點半下了大雨
,大雨之前的打雷聲,把筆者嚇到了。希望這場大雨不會釀災,而美國還在史上最大的旱災呢。
快速的把泰大的影片,流覽了一下,
更詳盡的內容可參考
http://ithelp.ithome.com.tw/question/10095031
不過泰大主要把**!==** **===**放在討論裏,
cdfu大提醒的,可見這個比較子的差異,大家覺得重要。
結果還是重覆了別人。這次看過泰大的影片,會比較避免這類情況的發生。
謝謝Tim的好文......推!
一點好奇的是,文中出現少許簡體字......是用羅馬拼音或五筆輸入法的關係嗎?