javascript中看似冗余的三元运算符

时间:2012-07-06 20:32:18

标签: javascript ternary

以下是在线浮动的常用代码,用于检查特定浏览器中是否启用了Cookie:

var cookieEnabled = (window.navigator.cookieEnabled) ? true : false;

if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
    document.cookie = "testcookie"
    cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false
}

if (!cookieEnabled) {
    // do some work
}

为什么第一行和第五行是三元语句?确实

var cookieEnabled = (window.navigator.cookieEnabled) ? true : false;

抓住以下不会的情况?

var cookieEnabled = (window.navigator.cookieEnabled);

第五行也是如此。

2 个答案:

答案 0 :(得分:3)

第一行的三元语句很有用,因为它将一个可能的非布尔值转换为布尔值。请考虑以下代码

window.navigator.cookieEnabled = "evil people do this";

以上是合法的,正如价值所说,邪恶的人这样做。如果没有三元语句,以下代码将无法按预期执行

if (cookiesEnabled === false) { 
  // ...
}

答案 1 :(得分:2)

确切地说:

(window.navigator.cookieEnabled) ? true : false

相当于:

!!window.navigator.cookieEnabled

然而:

(document.cookie.indexOf("testcookie") != -1) ? true : false

可以简单地替换为:

document.cookie.indexOf("testcookie") != -1

最后:

cookieEnabled == false

可以更改为:

!cookieEnabled

那么第一个案例的问题是什么?在JavaScript非零数字,非空字符串等中评估为true。因此if(window.navigator.cookieEnabled)传递的cookieEnabled也等于"foo"42。如果你真的想要一个boolean类型的variebale,你必须否定它两次​​。