Javascript 不知道为什么这个JS函数中有这么多-1

Javascript 不知道为什么这个JS函数中有这么多-1,javascript,Javascript,我想知道什么是‘A!’Btrue:false代表。还有,为什么这句话中有这么多-1 getBrowser: function() { if (null == this.browserName) { var a = navigator.userAgent.toLowerCase(); f("[getBrowser()] navigator.userAgent.toLowerCase() -> " + a); - 1 != a.indexOf("msie

我想知道什么是‘A!’Btrue:false代表。还有,为什么这句话中有这么多-1

getBrowser: function() {
    if (null == this.browserName) {
        var a = navigator.userAgent.toLowerCase();
        f("[getBrowser()] navigator.userAgent.toLowerCase() -> " + a); - 1 != a.indexOf("msie") && -1 == a.indexOf("opera") ? this.browserName2 = this.browserName = "MSIE" : -1 != a.indexOf("iphone") ? (this.browserName = "Netscape Family", this.browserName2 = "iPhone") : -1 != a.indexOf("firefox") && -1 == a.indexOf("opera") ? (this.browserName = "Netscape Family", this.browserName2 = "Firefox") : -1 != a.indexOf("chrome") ? (this.browserName = "Netscape Family", this.browserName2 = "Chrome") : -1 != a.indexOf("safari") ? (this.browserName = "Netscape Family", this.browserName2 = "Safari") : -1 != a.indexOf("mozilla") && -1 == a.indexOf("opera") ? (this.browserName = "Netscape Family", this.browserName2 = "Other") : -1 != a.indexOf("opera") ? (this.browserName = "Netscape Family", this.browserName2 = "Opera") : (this.browserName = "?", this.browserName2 = "unknown");
        f("[getBrowser()] Detected browser name:" + this.browserName + ", " + this.browserName2)
    }
    return this.browserName
},

在JavaScript中,
用于表示,它实际上是一个
if/else
语句,但以另一种形式编写。 那么这个,

if (condition) {
    stuff_if_true();
} else {
    stuff_if_false();
}
与此等效:

condition ?
    stuff_if_true() :
    stuff_if_false()
函数如何表示,“indexOf()方法返回指定值第一次出现的调用字符串对象内的索引,从fromIndex开始搜索。如果找不到值,则返回-1。”因此,在您提供的代码中,只有一些嵌套的if/else语句是用三元运算符编写的。他们实际上是在测试
a
变量中是否存在一些子字符串(chrome、opera等)

转换为if/else后,代码将为:

if (a.indexOf("msie") !== -1 && -1 === a.indexOf("opera")) {
    this.browserName2 = this.browserName = "MSIE"
} else if (-1 !== a.indexOf("iphone")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "iPhone";
} else if (-1 !== a.indexOf("firefox") && -1 === a.indexOf("opera")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "Firefox";
} else if (-1 !== a.indexOf("chrome")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "Chrome";
} else if (-1 !== a.indexOf("safari")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "Safari";
} else if (-1 !== a.indexOf("mozilla") && -1 === a.indexOf("opera")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "Other";
} else if (-1 !== a.indexOf("opera")) {
    this.browserName = "Netscape Family";
    this.browserName2 = "Opera";
} else {
    this.browserName = "?";
    this.browserName2 = "unknown";
    f("[getBrowser()] Detected browser name:" + this.browserName + ", " + this.browserName2)
}
你可能会感到困惑,因为在大多数情况下,你会看到州政府是
a.indexOf(“iphone”)!==-1
而不是
-1!==a、 indexOf(“iphone”)
(它们只是被切换了一下,但这里的意思是一样的)


干杯

indexOf()
方法返回指定值第一次出现的调用字符串对象内的索引,从
fromIndex
开始搜索。如果找不到值,则返回-1。“()您在哪里看到
A!=Btrue:false
在代码中?仅供参考,这是一个可怕的代码。通常只编写
else if
而不添加其他嵌套级别。这样可以更容易地看到所有的备选方案都是互斥的。@Barmar我使用了一个在线工具来转换代码,这就是生成的结果。我将代码修改为if/elseif语句,现在看起来更干净了。谢谢是的,好多了。您可能还希望将赋值更改为单独的语句,而不是逗号表达式。非常感谢!你给了我一个完美的答案@D-NAO0如果你愿意,你可以把我的答案标记为已接受:)干杯!