这个javascript函数有什么作用?

时间:2016-01-11 13:10:49

标签: javascript

var n = {
        Android: /Android/i.test(navigator.userAgent),
        Safari: /iPhone|iPad|iPod/i.test(navigator.userAgent) && !/CriOS|Chrome|Mercury/.test(navigator.userAgent)
    };

我对/Android/i.test()函数感到好奇。如果这个函数在另一个文件中?我猜它不是因为下一个函数/iPhone|iPad|iPod/i.test()更加好奇。这是' Android'上的字符串比较串?任何人都可以提供一些文件吗?

2 个答案:

答案 0 :(得分:15)

这是对正则表达式/Android/i的方法调用。

/Android/i部分代表regular expression或“正则表达式”,用于对字符串进行模式匹配。

正则表达式有一个名为test的方法,如果匹配则返回true。您可以将上面的hunk重写为:

androidRegex = /Android/i;
safariRegex = /iPhone|iPad|iPod/i;
criOsregex = /CriOS|Chrome|Mercury/;
var n = {
    Android: androidRegex.test(navigator.userAgent),
    Safari: safariRegex.test(navigator.userAgent) && !criOsregex.test(navigator.userAgent)
};

在Javascript中声明正则表达式的语法是/pattern/flags,其中pattern是要比较的模式,flags是其他选项。

Android的一个非常简单:它只是与字符串Android进行比较,并使用标记i使其不区分大小写。

Safari一个稍微复杂一些,因为它使用“更改”来匹配iPhoneiPadiPod|字符分隔符在正则表达式中交替显示。

CriOS正则表达式,特别是,留下i标志,因为作者希望它区分大小写(默认值)。

答案 1 :(得分:0)

var n被声明为two properties的对象,称为AndroidSafari

当对象为initialized时,会执行两个属性,返回boolean结果,User Agent的{​​{1}}为 Android 第一个,或第二个 iPhone iPad iPod

因此,您可以预期Navigatorpropertiestrue

编辑:正如@ N3dst4所述,这称为正则表达式。有关它的更多信息,请参阅他的回复。