我可以在JavaScript中将表示布尔值的字符串(例如“true”、“false”)转换为内部类型吗?

我有一个隐藏的HTML表单,它根据用户在列表中的选择进行更新。此表单包含一些表示布尔值的字段,并用内部布尔值动态填充。但是,一旦将该值放入隐藏的输入字段,它就会变成字符串。

一旦字段转换为字符串,我唯一能找到的确定它的布尔值的方法就是依赖于它的字符串表示的文字值。

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

有没有更好的方法来实现这一点?


当前回答

你甚至不需要使用变量,如果你知道'true'总是小写,你可以使用返回true或false的变量:

(eval(yourBooleanString == 'true'))

其他回答

你为什么不试试这样的

Boolean(JSON.parse((yourString.toString()).toLowerCase()));

当给出其他文本而不是true或false时,无论情况如何,它都会返回一个错误,并且它还会将数字捕获为

// 0-> false
// any other number -> true

你的解决方案很好。

在这种情况下,使用==是愚蠢的,因为字段的值始终是字符串。

答案很多,很难选出一个。在我的情况下,我在选择时会优先考虑性能,所以我创建了这个jsPerf,我希望它能给我们带来一些启示。

结果简述(越高越好):

条件语句:2826922Bool对象上的开关盒:2825469转换为JSON:1867774!! 转换:805322字符串原型:713637

它们与相关答案相关联,在那里你可以找到关于每一个答案的更多信息(利弊);特别是在评论中。

我有点晚了,但我有一个小片段要做,它本质上维护了所有JScripts truthey/falsey/dirty ness,但包含“false”作为false的可接受值。

与上述方法相比,我更喜欢这种方法,因为它不依赖第三方来解析代码(即:eval/JSON.parse),这在我看来是过度的,它足够短,不需要实用函数,并维护其他truthey/falsy约定。

var value = "false";
var result = (value == "false") != Boolean(value);

// value = "true"  => result = true
// value = "false" => result = false
// value = true    => result = true
// value = false   => result = false
// value = null    => result = false
// value = []      => result = true
// etc..

从字符串或数字中获取布尔值有一个很好的解决方案:

var boolValue = Boolean(Number('0'));

var boolValue = Boolean(Number('1'));

第一个将返回false,第二个将返回true。