Javascript 当值可能不是正确的布尔值时,如何测试true

Javascript 当值可能不是正确的布尔值时,如何测试true,javascript,Javascript,是否有一个函数或语句可用于检查从php、html或某些源代码中获取的真/假值,这些函数或语句可提供javascript无法理解为布尔值的真或假值。因此,我可以检查字符串true、布尔值true或1值(我认为php返回的值为true) 就像: var trueVal = true; if ( trueVal == true || trueVal === true || trueVal == "true" || trueVal == "TRUE" || trueVal == "1"

是否有一个函数或语句可用于检查从php、html或某些源代码中获取的真/假值,这些函数或语句可提供javascript无法理解为布尔值的真或假值。因此,我可以检查字符串true、布尔值true或1值(我认为php返回的值为true)

就像:

    var trueVal = true;
    if ( trueVal == true || trueVal === true || trueVal == "true" || trueVal == "TRUE" || trueVal == "1" || trueVal == 1 ) {

    //

    }
这有意义吗?有没有更简单的方法


谢谢

如果您能确保正确传递
true
,那么这可能会容易得多:

if( trueVal)
唯一一次出现问题的是,如果您有字符串
“false”
“0”
,但这是可以修复的:

if( trueVal && !trueVal.toString().match(/^(false|0)$/i))

据我所知,没有一种“通用”的方法可以做到这一点,比如一种元布尔检查函数,但可以减少比较的数量:

trueVal="1";
if(trueVal*1==1||trueVal.toLowerCase()=="true"){
    //do stuff
}
trueVal*1
采用
“1”
1
true
trueVal.toLowerCase()=“true”
接受
“true”
“true”
和所有大小写变体


希望这有帮助:)

如果您要查找的值在某种形式上类似于单词“true”或非零整数,请将其转换为字符串,然后检查它是否类似于单词“true”或非零整数

function isPHPTrue(x) {
  x = String(x);
  if (/^(true|[+-]?0*[1-9][0-9]*)$/i.test(x)) { return true; }
  if (/^(false|[+-]?0+)$/i.test(x)) { return false; }
  throw new Error('Not obviously true or false: ' + x);
}

false的值是多少?同样的困境?如果不是,你可以检查它是否为0?我真的无法控制
true
的传递方式,因为它来自不同的来源。。这将
“0”
“FALSE”
视为真实。@MikeSamuel我的意思是把
i
,而不是
g
。。。至于
“0”
,我也会添加它。在尝试正则化它们之前,已更新为将整数转换为字符串。真是太棒了!似乎在几乎所有可能的情况下都有效。谢谢
trueVal*1
如何处理
true
?谢谢@托马斯
true==1
给出了
true
,所以
true*1==1*1==1==true
:)谢谢。我对正则表达式知之甚少。这是否意味着搜索一个潜在的长字符串以查找
true
?这给我提供了
true
false
,然后总是有一个错误,即它显然不是一个或多个other@thomas,您的JSFIDLE总是会引发错误,因为您将
return
替换为
alert
<代码>返回结束函数调用。当您改为使用
alert
时,它不会结束函数调用,因此会继续抛出错误。@thomas,不,regex没有在长字符串中搜索true。
^
$
锚定字符串,以便整个文本必须为“true”或非零整数。结尾的
i
使其不区分大小写。
function convertToBoolean(input) {
    return input.toLowerCase() == "true" || input == 1;
}

// And to test this works:

console.log(convertToBoolean("TRUE"));  //true, boolean
console.log(convertToBoolean("true"));  //true, boolean
console.log(convertToBoolean("false")); //false, boolean
console.log(convertToBoolean("1"));     //true, boolean
console.log(convertToBoolean(0));       //false, boolean
// and of course...
console.log(convertToBoolean(true));    //true, boolean