Поднятые вопросы
Предыстория: значение ключа, прочитанное из файла cookie, равно «false», когда строка используется в качестве условия суждения, возникает проблема.
В мире JS 0, -0, null, "", false, undefined или NaN могут быть автоматически преобразованы в логическое значение false, тогда "false" строки не равно false, если судить ("false"), оно равно истинному.
Согласно объяснению W3C:
var myBoolean=new Boolean();
//下面的所有的代码行均会创建初始值为 false 的 Boolean 对象。
var myBoolean=new Boolean();
var myBoolean=new Boolean(0);
var myBoolean=new Boolean(null);
var myBoolean=new Boolean("");
var myBoolean=new Boolean(false);//不带单引号的是false
var myBoolean=new Boolean(NaN);
//下面的所有的代码行均会创初始值为 true 的 Boolean 对象:
var myBoolean=new Boolean(1);
var myBoolean=new Boolean(true);
var myBoolean=new Boolean("true");
var myBoolean=new Boolean("false");//带单引号的字符串false最终等于true
var myBoolean=new Boolean("Bill Gates");
Следовательно, если из файла cookie или фона возвращается значение «ложь» строки данных, его нельзя напрямую использовать в качестве условия оценки.
решение
- преобразование тернарного оператора
let bool = result === 'false' ? false : true
- показатель
let bool = {
'true': true,
'false': false
};
bool[ v ] !== undefined ? bool[ v ] : false;
- JSON.parese
Это должен быть самый удобный и лаконичный способ
JSON.parse('false') // false
JSON.parse('true') //true
- Соответствие серверной части, не используйте строку «ture» или «false», вместо этого используйте 0,1.
let target = '0'
let bool = !!+target
[Направление обсуждения] Это лучшее решение, найденное на данный момент. Если есть лучший и более элегантный способ, опубликуйте его здесь.