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
}

1 行目と 5 行目が 3 文になっているのはなぜですか? する

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

以下がそうではないいくつかのケースをキャッチしますか?

var cookieEnabled = (window.navigator.cookieEnabled);

5行目も同様です。

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タイプの変数が必要な場合は、それを 2 回否定する必要があります。

于 2012-07-06T20:36:21.033 に答える