如何在模型提取时将1转换为true或0转换为false

时间:2013-05-01 05:29:09

标签: javascript jquery backbone.js

我有一个使用mysql数据库的JSON响应设置的模型。模型数据使用true或false设置为数据库中的boolean / tinyint字段,该字段使用10

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

无论如何要么正确地让我的来自mysql的JSON响应是一个布尔值true或false值而不是10,或者最好是,有没有办法让我的模型更新自己获取(并在视图呈现之前)根据它的1或0属性来投射truefalse

e.g。当我需要{"isChecked":"1"}时,我的模型数据看起来像{"isChecked":true}

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

6 个答案:

答案 0 :(得分:128)

您只需将string转换为int +,然后将结果转换为布尔值!!

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

您可以使用parse方法执行此操作:

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

答案 1 :(得分:54)

使用双倍而不是:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);

答案 2 :(得分:26)

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

Boolean(Number("0")); // false
Boolean(Number("1")); // true

答案 3 :(得分:7)

将比较分配给属性值

的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相同的运算符限制适用。

Double Not

'double not'也有效。当人们第一次阅读它时会让人感到困惑,但它在两种语言中都适用于整数/数字类型值。但它在JavaScript中不适用于字符串类型值,因为它们总是评估为true:

的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

答案 4 :(得分:0)

1 '1''true'转换为true0 '0' 'false' null和{{ 1}}到undefined

false

这是单元测试:

function primitiveToBoolean(value?: string | number | boolean | null): boolean {
  if (value === 'true') {
    return true;
  }

  return typeof value === 'string'
    ? !!+value   // we parse string to integer first
    : !!value;
}

TypeScript Recipe: Elegant Parse Boolean

答案 5 :(得分:0)

Boolean(Number(myVar))

!!+myVar