如何在Javascript中比较字符串和布尔值?

20
我从服务器获得了Json "false"。我将其作为bool响应,但它是Json格式的,因此在浏览器中类型是String而不是bool
因此,如果我想检查"false" == false时运行(!data),那么它们将无法工作。
那么如何在JavaScript中从String解析出bool呢? "true" == true"false" == false。然后,代码(!data)可以检查它是什么[truefalse]。
8个回答

19
  • 如果操作数之一是布尔值,将布尔操作数转换为1(如果为 true)或 +0(如果为 false)。
  • 当将数字与字符串进行比较时,请尝试将字符串转换为数字值。

来源:MDN Equality Operators 页面

示例:

true == "true";   // 1 == NaN → false
true == "1";      // 1 == 1   → true
false == "false"; // 0 == NaN → false
false == "";      // 0 == 0   → true
false == "0";     // 0 == 0   → true

18

我会直接检查字符串"true"

let data = value === "true";
否则,您可以使用JSON.parse()将其转换为本地的 JavaScript 值,但是如果你知道你只会收到字符串"true""false",那么这会增加很多开销。

1
JSON.parse()将把服务器布尔解码为JavaScript布尔,因此您可以调用(!myJSONObject.myBool),这比eval更推荐。 json.org - Roberto Alarcon
1
这真的有些过度了。 直接将字符串值与“true”进行比较至少同样有效。 除了完全满足他的需求外,它还是普遍可移植的。 - kqnr
@chomp 它确实回答了问题“如何在JavaScript中将字符串解析为布尔值?”不过,我会简单地检查字符串是否为'false' - alex
此时,这变成了一个无聊的争论,因为暗示“香蕉”是真实的和暗示“香蕉”是虚假的一样没有意义。 :) - kqnr
我后来发现这个问题是因为项目中没有引入 [json.js] 文件。我使用了 jQuery.parseJSON()。谢谢。 - user605334

12
var data = true;
data === "true" //false
String(data) === "true" //true

这个运行良好。


4

如果只是一个JSON格式的"false"/"true",你可以使用:

if(! eval(data)){
    // Case when false
}

如果您限制代码仅接受来自服务器的JSON数据,并始终将其jsonParse或eval为JS对象(类似于jQuery getJSON的方式。它仅接受JSON响应并在传递给回调函数之前将其解析为对象),那么代码将更加清晰。

这样,您不仅可以将布尔值作为从服务器返回的布尔值,还可以保留所有其他数据类型,并且可以使用常规表达式语句而不是特殊的语句。

编码愉快。


4

尝试表达式 data == "true"

测试:

data = "false" -- 值将为 false

data = "true" -- 值将为 true

此外,请修复您的 JSON。JSON 可以很好地处理布尔值。


1

我认为您需要查看JSON数据的生成方式。在JSON中,确实可以有普通的JS布尔值false。

{ "value1" : false, "value2" : true }


0
if(data+''=='true'){
    alert('true');
}  

将布尔值附加到空字符串中,将其转换为字符串,然后与String对象进行比较。

0
String.prototype.revalue= function(){
  if(/^(true|false|null|undefined|NaN)$/i.test(this)) return eval(this);
  if(parseFloat(this)+''== this) return parseFloat(this);
  return this;
}

来源:http://www.webdeveloper.com/forum/showthread.php?t=147389

实际上,你只需要从函数中的第一个“if”语句——测试代码中的真假并将其eval,将其转换为布尔值


3
在基类(例如String)中添加功能往往会引起维护和清晰度问题。 - Larry K
3
虽然聪明,也许我只是一个类型安全的拘谨者,但我永远不会鼓励任何人在任何实际目的中使用这段代码。 - kqnr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接