簡體   English   中英

JS:“false”可以強制類型為 false 嗎?

[英]JS: Can “false” be type-coerced to false?

當您使用 Html5 localStorage 值存儲為字符串。 如果您想存儲復選框的 state 然后在以后恢復它,這是您需要處理的事情。 我希望這樣的事情會起作用:

(function() {
  function e(id) { return document.getElementById(id); }

  e('save').addEventListener('click', function() {
   localStorage['check-value'] = e('checkbox').checked
  })
  e('checkbox').checked = localStorage['check-value'];
})();

但是,如果未選中該框並且字符串"false"在倒數第二行上被強制類型強制為true ,則“check-value”似乎將存儲"false"行中的某些內容。 我知道我可以做一些 if-test,但這是一個愛好項目,如果可能的話我想弄清楚。 可以將"false"強制為false嗎?

我沒有為這個 btw 使用庫,因為它是一個 chrome 擴展,我想讓它保持輕量級。

"false" 只是一個字符串,就像其他字符串一樣,您需要在此處進行自己的檢查。

您可以測試它是否等於字符串“false”:

e('checkbox').checked = localStorage['check-value'] != 'false';

或者,您可以在存儲它之前和檢索它之后將其強制轉換為一個數字:

localStorage['check-value'] = +e('checkbox').checked
// ...
e('checkbox').checked = +localStorage['check-value']

您可以嘗試使用JSON.parse提取值。 理想情況下,您還可以使用JSON.stringify來序列化對象等。您可以通過將其抽象到其他接口后面來使其更易於管理。

JSON.parse("false") == false

包裝器示例:

var LocalStorageManager = new (function () {
   this.set = function (key, object) {
      localStorage[key] = JSON.stringify(object);
   };

   this.get = function (key) {
      return JSON.parse(localStorage[key]);
   };
});

你不能在 JS 上真正做到這一點。 您應該使用var boolValue = (stringValue !== 'false')或任何讓您的船漂浮的東西。

更改此行:

e('checkbox').checked = localStorage['check-value'];

對此:

e('checkbox').checked = localStorage['check-value'] == "true";

或取決於你想要什么:

e('checkbox').checked = localStorage['check-value'] != "false";

如果您這樣做超過幾次,則將 boolean 本地存儲訪問包裝在一個很小的 function 中,它只返回 boolean 真或假。

function tfStr(val) {
    return(val === "true");
}

只是在這里重復,但你可以做一些非常愚蠢的事情,比如

eval(localStorage['check-value'])

如果字符串為假,它將評估為 boolean 假。 顯然你不想這樣做,因為這是一個主要的安全漏洞。

或者,您可以使用三元運算符:

(localStorage['check-value']==="false")?false:localStorage['check-value'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM