JavaScript中圓括號()和方括號[]的一個特殊用法

weixin_34377065發表於2015-06-21

緣由:

    JS這個語言實在過於靈活,當然其不足之處也有很多。當今各種開源JS指令碼鋪天蓋地,所以很多人的程式設計風格一下湧到你面前,特別是那些大師級的JS編碼風格與技巧。

    在最近分析NIKE這個網站原始碼時,看到了如下陣列表達方式:

// always trusted origins, can be exact strings or regular expressions

var alwaysTrustedOrigins = [(/\.nike.com/),

    (/\.nikedev.com/),

    (/\.nike.com.tw/),

    (/\.swoosh.com/),

    (/\.nikeid.com/),

    (/\.facebook.com/),

    (/\.rga.com/),

    (/\.custhelp.com/)];

 

使用上面定義的程式碼如下:

 var alwaysTrusted = false, i = alwaysTrustedOrigins.length;

            while (i-- && !alwaysTrusted) {

                if (alwaysTrustedOrigins[i] instanceof RegExp) {

                    alwaysTrusted = alwaysTrustedOrigins[i].test(remote.origin);

                }

                else if (typeof alwaysTrustedOrigins[i] == "string") {

                    alwaysTrusted = (remote.origin === alwaysTrustedOrigins[i]);

                }

            }

 

顯然,操作方式還是標準陣列方式,但是陣列元素就‘成為’兩種資料型別。本質上上面表達仍然是物件型別,但是從接下來的應用程式碼可以看出,這種表達方式實現了兩種情況下需求:

 

 在支援RegExp物件的環境下與不支援RegExp物件的環境下。

 

注意:上面使用的運算會可不一樣:分別是instanceof  和typeof,需要結合JS的自動型別轉換進行理解才對喲!

 

結論:上面是一種不錯的陣列元素表達技巧,一下考慮了環境是否相容RegExp物件的兩種環境下的編碼,有意思!

 


另有引文如下,供大家一併參考(引文URL:http://www.jb51.net/article/40358.htm)。

大家對JavaScript中圓括號() 和 方括號[] 的特殊用法或許有些疑問,本文就帶著這些疑問為大家詳細介紹下,有疑問的朋友可不要錯過了哈。

 

(1, 2, 3);
// return 3; 很好奇,為什麼會返回3?這是什麼機制?圓括號起到了什麼作用?

(1, 2, 3, alert )("Amazing!");
// 這裡就更好玩了,居然可以直接呼叫alert ;經過測試,全域性函式都可以通過這樣呼叫。

下面是關於 方括號[] 的疑問:
在JS中,[]幾乎就和陣列畫上了等號,但也有神奇的時候。

[1,2,3][1];
// return 2; 當然這種方法也經常使用,常用於陣列的索引 和 呼叫的物件的響應屬性名存放在某個變數時。
[1,2,3][1,2];

//return 3 ; 這種情況就有趣多了,和上面圓括號的情況很像,都會返回括號內的最後一個值

在(1,2,3)裡,括號和逗號都是運算子,逗號運算子返回最後一個表示式的求值結果,具體規則可自己查。
("Amazing")的括號表示函式呼叫。
alert是一個函式物件,當它作為表示式的求值結果返回,當然可以被呼叫。

[1,2,3]這裡的方括號是宣告陣列常量,緊跟[1]表示取陣列元素。[1,2,3][1]意為取[1,2,3]這個陣列裡的第一個元素,即2(下標從0開始)

[1,2,3][1,2]=[1,2,3][(1,2)]=[1,2,3][2]=3

相關文章