我有一个模型,它设置了来自 mysql 数据库的 JSON 响应。将模型数据设置为 true 或 false 到数据库中的 boolean/tinyint 字段中,该字段使用 1
或 0
。
在我看来,我有一个绑定来检查带有下划线 _.isBoolean
的布尔值。当然,当我的模型接收到数据时,它被设置为 1
或 0
而不是 true 或 false 并且 _.isBoolean
检查失败。
无论如何,是否可以正确地让我的来自 mysql 的 JSON 响应为布尔真或假值而不是 1
或 0
,或者最好有办法让我的模型在获取时自行更新(以及在视图呈现之前) ) 根据其 1 或 0 属性强制转换 true
或 false
?
例如,当我需要它时,我的模型数据看起来像 {"isChecked":"1"}
{"isChecked":true}
非常感谢您提出的任何建议!
您只需使用 +
将 string
转换为 int
并使用 !!
将结果转换为布尔值:
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))
});
}
使用双不:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
value = (!!parseInt(value) ? true : false)
!!2
或任何其他数字 = false
,对吗?
这是另一个更长但可能更具可读性的选项:
Boolean(Number("0")); // false
Boolean(Number("1")); // true
将比较分配给属性值
JavaScript
您可以将属性的比较分配给 "1"
obj["isChecked"] = (obj["isChecked"]==="1");
不过,这仅评估 "1"
的字符串值。其他变量评估为假,就像实际的 typeof number
将是假的。 (即obj["isChecked"]=1
)
如果您想对 "1"
或 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
Boolean(Number(myVar))
或者
!!+myVar
int
。!!+"1"; // true
、!!+"0"; // false
、!!+1; // true
、!!+0; // false