这行javascript是什么意思?

时间:2014-04-28 14:51:45

标签: javascript properties

我刚开了Retina.js希望学到一些东西,但我在第一行难倒。

var root = (typeof exports === 'undefined' ? window : exports);

这条线到底是做什么的?

再往下,

 function Retina() {}

 root.Retina = Retina;

如果没有首先定义Retina属性,它是如何设置出来的呢?

3 个答案:

答案 0 :(得分:2)

typeof是一个运算符,当用于一个根本没有定义的变量时,仍然会得到值'undefined'。所以表达式:

(typeof exports === 'undefined' ? window : exports)

检查exports是否在范围内。如果不是,则会生成window(浏览器中的全局对象),如果是,则会生成exports(用于导出内容的标准名称 [某种]模块 - 见Relation between CommonJS, AMD and RequireJS?)。然后将结果分配给root

如果您想知道条件运算符,

var d = a ? b : c;

或多或少等同于

var d;

if (a) {
    d = b;
} else {
    d = c;
}

至于root.Retina = Retina;,就像JavaScript中的所有其他属性一样,没有必要声明它,也没有工具来声明它。

答案 1 :(得分:0)

如果导出类型等于' undefined',则我们将其设置为窗口。否则,我们将其设置为导出。

它的三元组,你可以这样做:

if(typeof(exports) === 'undefined') 
root = window;
else 
root = exports

答案 2 :(得分:0)

var root = (typeof exports === 'undefined' ? window : exports);

此行检查exports是否不是undefined。在Node.js环境中,exports特殊变量指的是当前模块。因此,如果未定义exports,则您使用的是Node.js环境中的浏览器。

因此,如果您在浏览器中,root将引用window对象,否则为当前模块对象(exports)。 root.RetinaRetina函数分配给窗口或当前模块。