2

以下是在线浮动的常见代码,用于检查特定浏览器中是否启用了 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);

第五行也是如此。

4

2 回答 2

3

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

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

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

if (cookiesEnabled === false) { 
  // ...
}
于 2012-07-06T20:36:01.430 回答
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类型的变量,你必须两次否定它。

于 2012-07-06T20:36:21.033 回答