2013-09-30 35 views
1

我正在使用javascript檢測操作系統版本。我對Java的理解,但一些JavaScript語法只是混淆像下面這樣:Java新手入門javascript語法

var os = (function() { 
     var ua = navigator.userAgent.toLowerCase(); 
     return { 
      isWin2K: /windows nt 5.0/.test(ua), 
      isXP: /windows nt 5.1/.test(ua), 
      isVista: /windows nt 6.0/.test(ua), 
      isWin7: /windows nt 6.1/.test(ua) 
     }; 
    }()); 

我不知道爲什麼我們有冒號:在return語句和究竟是他們做什麼。

另外還有什麼是/ /和中間的文字的目的?

它返回一個布爾值嗎?或一個字符串?

還有,爲什麼我們的

 }()); 
到底

我只需要輸入

} 

代替 感謝您抽出時間來閱讀通過。我知道這段代碼適合我,但我想知道爲什麼。

謝謝。

+1

線索:Javascript對象,正則表達式,即時函數。 – PSL

回答

0

該函數返回一個具有4個屬性的對象(isWin2K,isXP等),每個屬性都有一個布爾值。您可以使用它像這樣:

if (os.isXP) { 
    // Windows XP specific code 
} 

結腸是聲明對象的語法文字的一部分:

var a = { prop1 : val1, prop2 : val2 }; 

在這裏閱讀更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals

,看起來像一個字符串的事但介於/而不是「或」被稱爲文字RegExp。

更多這裏:https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions

最後,所有有用的代碼都包含在立即調用的函數表達式(IIFE)中。這是JavaScript中用於防止範圍(通常是全局範圍)受變量污染的常見結構。正如你將要學習的那樣,JavaScript具有函數範圍,所以如果你想要隔離一些變量並讓它們爲「本地」,你需要將它們包裝在一個函數中。該IIFE做到了這一點,但它也立即調用,所以指令在那個地方執行,就像如果包裝函數不存在:

var b = 10; 
a = b + 5; 

相當於

(function() { 
var b = 10; 
a = b + 5; 
})(); 

除了第二種溶劑不在外部範圍引入b變量。

更多在這裏閱讀:http://en.wikipedia.org/wiki/Immediately-invoked_function_expression

3

我不知道爲什麼我們有冒號:在return語句

return語句的右手邊是an object literal。冒號將屬性名稱(左側)與值(右側)分開。

另外還有什麼是/ /和它們之間的文字的目的?

那些是regular expression literals

是它返回一個布爾值?或一個字符串?

都不是,它返回一個對象。

還有,爲什麼我們的}()

這是一個立即調用函數。 os是函數的返回值,而不是函數本身。

在這個例子中,它允許在局部範圍中使用的ua變量。

+0

感謝您向我介紹術語「對象字面量」,我可以閱讀更多關於它的內容。我感謝您的幫助。 – Bilal

0

我不確定爲什麼我們有冒號:在return語句中,他們究竟在做什麼。

在給定的代碼中,return {r:val}實際上是返回一個對象。在Javascript:

var obj = { 
    r: 'some value', 
    t: 'some other value' 
}; 

在功能上等同於:

var obj = new Object(); 
obj.r = 'some value'; 
obj.t = 'some other value'; 

因此您的代碼的以下部分:與上述實施例中描述

return { 
      isWin2K: /windows nt 5.0/.test(ua), 
      isXP: /windows nt 5.1/.test(ua), 
      isVista: /windows nt 6.0/.test(ua), 
      isWin7: /windows nt 6.1/.test(ua) 
     }; 

真的返回的對象。現在讓我們用return obj代替return {r:val}。所以你的給定函數的形式如下:

var os = (function() 
        { 
         return obj 
        }()); 

現在研究一下javascript函數。 This page會給你一個很好的洞察javascript功能。

+0

謝謝。我相信我在迴歸聲明中返回了四個布爾值。 – Bilal

+0

四布爾人!不,你正在返回一個有四個字段的對象。重讀這個例子。 – Sage