1

我正在使用 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 语句中以及他们到底在做什么。

还有 / / 和其间的文字的目的是什么?

它返回一个布尔值吗?还是字符串?

另外,为什么我们有

     }());

到底?

我只想输入

    }

相反,感谢您抽出宝贵时间通读。我知道这段代码对我有用,但我想知道为什么。

谢谢。

4

3 回答 3

3

我不确定为什么我们有冒号:在return语句中

return 语句的右手边是一个对象字面量。冒号将属性名称(左侧)与值(右侧)分开。

还有 / / 和其间的文字的目的是什么?

这些是正则表达式文字

它返回一个布尔值吗?还是字符串?

也不是,它返回一个对象。

另外,为什么我们有}()

这是一个立即调用的函数。os是函数的返回值,而不是函数本身。

在此示例中,它允许ua在本地范围内使用变量。

于 2013-09-30T18:38:17.123 回答
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

于 2013-09-30T18:36:47.567 回答
0

我不确定为什么我们有冒号:在 return 语句中以及他们到底在做什么。

在您给定的代码中, thereturn {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 {r:val}return obj. 所以你给定的函数有以下形式:

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

现在学习一下javascript函数。此页面将为您提供有关 javascript 功能的非常好的见解。

于 2013-09-30T18:38:45.073 回答