最近一些開發緣故,在看jQuery的程式碼

看完果然還是覺得JavaScript只有一句話

「代誌絕對不是憨人想的那麼簡單」

光是function裡面所有的變數值都能共用和保留就夠吃驚了

勉勉強強可以去猜這是怎麼實作的

不過這個不是重點

而是 && 與 || 這兩個傳統上的邏輯連接運算子

看來是超出我的所知範圍,好像也只是小事情 q:

平常用歸用

自從看到jQuery之後才發覺還有這樣的特性

今天才剛接觸,概念還有點模糊

原則上從C和 Java來看,Operation的運算結果是布林值,也就是true或false

例如說C的 3 && 2,運算結果是 1,理論上這兩個運算結果應該不是 true就是false

但是JavaScript的運算值結果似乎是運算域本身

 

例如:

        false && new Array => (new Array)

        [] || [1, 2, 3, 4] => []

也就是說有了這項特性之後,就不用再寫那麼多字

最近開發常常會有需要先確認物件是否存在 (is undefined),再讀取物件屬性

傳統作法是寫

        var variable;

        if (typeof obj != "object")  variable = obj.attr1;

有這項特性可以濃縮成

        variable = obj && obj.attr1;

也就是說若 obj被認定為 true-equivalent,則會運算取得右運算域值 (即 obj.attr1)

當obj被認定為false-equivalent,則會取得左運算域值 (即 obj)

不過要注意的是

undefined、false、0、null都是 false-equivalent (在這個狀況下 "0"和""就不算了)

true、1本身也就是true-equivalent

因此運算結果可能不一定是undefined

就算是undefined也並不代表obj就是 undefined (仔細想想 obj = true以及 obj = false的狀況)

所以若發現設計並不單純 (也就是你的目的並不是只為了取得obj.attr1),一定要謹慎使用才行

 

P.S.  從chrome的測試看來,若單獨使用運算式

        不知為啥左值若是JSON物件的話指令會出現語法錯誤  (如: {} || 3)

        實際觀察,推測應該是因為JSON物件被當作是 Block 解讀的關係

文章標籤
創作者介紹
創作者 wylokgo101 的頭像
wylokgo101

豆棚瓜架雨如絲 - WYLOKGO101

wylokgo101 發表在 痞客邦 留言(0) 人氣()