以下是在线浮动的常用代码,用于检查特定浏览器中是否启用了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);
第五行也是如此。
答案 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,你必须否定它两次。