是否有更好的方法来改进以下语句,以检查val()
是'true'
还是'false'
,如果是,那么它会将其更改为布尔值。原因是,某些值可能是一个单词。
var thisval = $(this).val();
if (thisval == "true"){
ao[id] = true;
} else if (thisval == "false"){
ao[id] = false;
} else {
ao[id] = $(this).val();
}
答案 0 :(得分:14)
最具可读性:
var thisval = $(this).val();
ao[id] = thisval === 'true' ? true :
thisval === 'false' ? false :
thisval;
基于条件运算符的单行:
var thisval = $(this).val();
ao[id] = thisval === 'true' ? true : (thisval === 'false' ? false : thisval);
基于||的单线程和&&行为:
var thisval = $(this).val();
ao[id] = thisval === 'true' || (thisval !== 'false') && thisval || false;
最短单线(上述组合):
var thisval = $(this).val();
ao[id] = thisval === 'true' || (thisval === 'false' ? false : thisval);
答案 1 :(得分:8)
尝试JSON.parse()。
"true"
和"false"
实际上是true
false
的 json表示 。这就是ajax如何从服务器端将json对象解析为字符串。如果在服务器端,我们返回true,false =>浏览器将以字符串“true”或“false”(json表示)
if ( $(this).val() == "true" || $(this).val() == "false") {
ao[id] = JSON.parse($(this).val());
}else {
ao[id] = $(this).val();
}
答案 2 :(得分:2)
String.prototype.bool = function() {
return (/^true$/i).test(this);
};
if ( $(this).val() == "true" || $(this).val() == "false") {
ao[id] = $(this).val().bool();
}else {
ao[id] = $(this).val();
}
答案 3 :(得分:1)
这可能略微更优雅:
var thisval = $(this).val();
if (thisval === "true" || thisval === "false") {
thisval = (thisval === "true");
}
答案 4 :(得分:0)
var thisval = $(this).val();
switch(thisval) {
case 'true' :
ao[id] = true;
break;
case 'false' :
ao[id] = false;
break;
default:
ao[id] = thisval;
}
我会创建一个数组来保存字符串为true或false时的两个可能值。然后,我会搜索是否在该数组中找到thisval
。如果不是,indexOf
函数将返回-1。之后,只需要检查这些值并构建您想要的案例。
编辑:我已根据Tibos的建议更新了代码。谢谢!
答案 5 :(得分:0)
在nodejs中,使用node-boolify可以使用isBoolean()和Boolify()
验证结果
var isBoolean = require('node-boolify').isBoolean;
isBoolean(true); //true
isBoolean('true'); //true
isBoolean('TRUE'); //false
isBoolean(1); //true
isBoolean(2); //false
isBoolean(false); //true
isBoolean('false'); //true
isBoolean('FALSE'); //false
isBoolean(0); //true
isBoolean(null); //false
isBoolean(undefined); //false
isBoolean(); //false
isBoolean(''); //false
布尔值转换结果
var Boolify = require('node-boolify').Boolify;
Boolify(true); //true
Boolify('true'); //true
Boolify('TRUE'); //null
Boolify(1); //true
Boolify(2); //null
Boolify(false); //false
Boolify('false'); //false
Boolify('FALSE'); //null
Boolify(0); //false
Boolify(null); //null
Boolify(undefined); //null
Boolify(); //null
Boolify(''); //null
答案 6 :(得分:0)
('' + thisval).toLowerCase() === 'true'
如果额外的字符串和 toLower 可以忽略不计,可能会很有用 - 可能很简单。
如果显式设置为真(布尔值或不区分大小写的字符串)则为真,否则为假。
//如此完整的解决方案,如果既不是真也不是假,得到相同的值 const thisvalStr = ('' + thisval).toLowerCase(); a[id] = thisvalStr === '真'?真:(thisvalStr === '假')?假:thisval;
可以根据需要使用 || 修改以包含其他值,例如 1 等或数组。
const TrueValuesStr = ['1', 'true']
TrueValueStr.contains(('' + thisval).toLowerCase() === 'true')