我无法理解这个简单的JS代码

时间:2009-05-16 09:12:21

标签: javascript

我无法理解这段代码。如果这是一个RegExp,可以用更简单的方式完成吗?或者这已经广泛兼容? (使用IE6和更新的浏览器)

var u = navigator.userAgent;

// Webkit - Safari
   if(/webkit/i.test(u)){
// Gecko - Firefox, Opera
   }else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
   }

这只是:

String.indexOf("webkit")

5 个答案:

答案 0 :(得分:7)

首先,它会在字符串u中查找“webkit”(忽略大小写),以确定浏览器是Safari。

如果没有找到,它会查找“mozilla”(没有“兼容”)或“opera”以试图确定浏览器是Firefox或Opera。同样,搜索忽略了大小写(/i)。

修改

/.../i.test()代码是一个正则表达式,它们内置于JavaScript中。

答案 1 :(得分:3)

javascript中的

test()是一个正则表达式测试函数。您可以阅读更多相关信息here.

  

此方法测试字符串中正则表达式的匹配,如果成功则返回true,否则返回false。测试方法可以与字符串文字或字符串变量一起使用。

代码:

rexp = /er/
if(rexp.test("the fisherman"))
   document.write("It's true, I tell you.")

输出:

It's true, I tell you.

另外here's另一个很棒的页面,详细介绍了这个功能。

  

执行正则表达式与指定字符串之间匹配的搜索。返回true或false。

答案 2 :(得分:2)

这类似,但会返回任何浏览器的客户端名称和版本。

window.navigator.sayswho= (function(){
    var N= navigator.appName, ua= navigator.userAgent, tem;
    var M= ua.match(/(opera|chrome|safari|firefox|msie)\/? *(\.?\d+(\.\d+)*)/i);
    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
    M= M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
    return M;
})();

警报(navigator.sayswho)

答案 3 :(得分:1)

您的代码似乎是某种浏览器嗅探。 u的价值由user agent identifier开头。并且使用正则表达式进行测试(使用RegExp literal syntax /expr/构建)。

答案 4 :(得分:0)

正则表达式的方法测试测试字符串中正则表达式的匹配,如果成功则返回true,否则返回false。

此代码在u变量的字符串中测试正则表达式'webkit','mozilla'等的匹配。