130

我有一个模型,它设置了来自 mysql 数据库的 JSON 响应。将模型数据设置为 true 或 false 到数据库中的 boolean/tinyint 字段中,该字段使用1or 0

在我看来,我有一个绑定来检查带有下划线的布尔值_.isBoolean。当然,当我的模型接收到数据时,它被设置为1or0而不是 true 或 false 并且_.isBoolean检查失败。

无论如何,是否可以正确地让我的来自 mysql 的 JSON 响应是布尔值 true 或 false 值而不是1or 0,或者最好是,有没有办法让我的模型在获取时(以及在视图呈现之前)进行自我更新以投射truefalse基于它是 1 还是 0 属性?

例如,我的模型数据看起来像{"isChecked":"1"}我需要的时候{"isChecked":true}

非常感谢您提出的任何建议!

4

5 回答 5

221

您只需要转换stringintwith+并将结果转换为 boolean with !!

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

您可以在方法中执行此操作parse

parse: function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

更新:7 年后,我发现Number(string)转换更加优雅。变异对象也不是最好的主意。话虽如此:

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}
于 2013-05-01T06:03:08.617 回答
92

使用双不:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);
于 2013-05-01T05:54:22.950 回答
80

这是另一个更长但可能更具可读性的选项:

Boolean(Number("0")); // false
Boolean(Number("1")); // true
于 2017-07-18T19:19:27.023 回答
16

将比较分配给属性值

JavaScript

您可以将属性的比较分配给"1"

obj["isChecked"] = (obj["isChecked"]==="1");

这仅评估 String 值"1"虽然。其他变量评估为假,就像实际的typeof number一样是假的。(即obj["isChecked"]=1

如果你想对"1"or不加区别1,你可以使用:

obj["isChecked"] = (obj["isChecked"]=="1");

示例输出

console.log(obj["isChecked"]==="1"); // true
console.log(obj["isChecked"]===1); // false
console.log(obj["isChecked"]==1); // true
console.log(obj["isChecked"]==="0"); // false
console.log(obj["isChecked"]==="Elephant"); // false

PHP

PHP中的相同概念

$obj["isChecked"] = ($obj["isChecked"] == "1");

适用于上述 JavaScript 的相同运算符限制。

双非

“双重不”也有效。人们第一次阅读它时会感到困惑,但它在两种语言中都适用于整数/数字类型值。然而,它在 JavaScript 中不适用于字符串类型值,因为它们总是评估为真:

JavaScript

!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false

PHP

echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
于 2013-05-01T05:35:02.637 回答
1
Boolean(Number(myVar))

或者

!!+myVar
于 2020-11-23T13:35:17.483 回答