Javascript检查字符串是否为true或false并转换为Boolean

时间:2013-11-11 13:23:24

标签: javascript

是否有更好的方法来改进以下语句,以检查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();
}

7 个答案:

答案 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();
}

DEMO

答案 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')