14

有没有更好的方法来改进下面的语句来检查是否val()'true'或者'false'如果是,那么它将把它更改为布尔值。原因是,某些值可能是一个词。

var thisval = $(this).val();
if (thisval == "true"){
    ao[id] = true;
} else if (thisval == "false"){
    ao[id] = false;
} else {
    ao[id] = $(this).val();
}
4

8 回答 8

20

最易读:

var thisval = $(this).val();
ao[id] = thisval === 'true' ? true : 
         thisval === 'false' ? false : 
         thisval;

基于条件运算符的单行:

var thisval = $(this).val();
ao[id] = thisval === 'true' ? true : (thisval === 'false' ? false : thisval);

基于||的单线 和 && 行为:

var thisval = $(this).val();
ao[id] = thisval === 'true' || (thisval !== 'false') && thisval || false;

最短的单线(以上组合):

var thisval = $(this).val();
ao[id] = thisval === 'true' || (thisval === 'false' ? false : thisval);
于 2013-11-11T13:31:55.387 回答
9

试试JSON.parse()

"true"并且"false"实际上是,的json 表示。这就是 ajax 将 json 对象解析为来自服务器端的字符串的方式。如果在服务器端,我们返回 true, false => 浏览器将接收它作为字符串“true”或“false”(json 表示)truefalse

if ( $(this).val() == "true" ||  $(this).val() == "false") {
    ao[id] = JSON.parse($(this).val());
}else {
    ao[id] = $(this).val();
}

演示

于 2013-11-11T13:42:25.407 回答
3
String.prototype.bool = function() {
    return (/^true$/i).test(this);
};


if ( $(this).val() == "true" ||  $(this).val() == "false") {
    ao[id] = $(this).val().bool();
}else {
    ao[id] = $(this).val();
}
于 2013-11-11T13:32:35.703 回答
1

这可能会优雅一些:

var thisval = $(this).val();

if (thisval === "true" || thisval === "false") {
    thisval = (thisval === "true");
}
于 2013-11-11T13:30:27.750 回答
1
('' + thisval).toLowerCase() === 'true'

如果额外的字符串和 toLower 可以忽略不计,则可能很有用 - 可能很简单。

如果显式设置为 true(布尔值或不区分大小写的字符串),则为 true,否则为 false。

 // so complete solution to get the same value if neither true nor false
const thisvalStr = ('' + thisval).toLowerCase();
a[id] = thisvalStr === 'true'? true: (thisvalStr === 'false')? false: thisval;

可以根据需要使用 || 修改以包含附加值,例如 1 等 或数组。

const TrueValuesStr = ['1', 'true']

TrueValueStr.contains(('' + thisval).toLowerCase() === 'true')
于 2021-07-07T14:00:35.720 回答
0
var thisval = $(this).val();

switch(thisval) { 
case 'true' : 
    ao[id] = true; 
    break; 

case 'false' : 
    ao[id] = false; 
    break; 

default: 
    ao[id] = thisval; 

}

我将创建一个数组来保存字符串为真或假时的两个可能值。然后,我会搜索以查看是否thisval在该数组中找到。如果不是,该indexOf函数将返回 -1。之后,只需检查这些值并建立您想要的案例即可。

编辑:我已经根据 Tibos 的建议更新了代码。谢谢!

于 2013-11-11T13:31:35.430 回答
0

在 nodejs 中通过使用node-boolify我们可以使用 isBoolean() & Boolify()

验证结果

var isBoolean = require('node-boolify').isBoolean;

isBoolean(true); //true
isBoolean('true'); //true
isBoolean('TRUE'); //false
isBoolean(1); //true
isBoolean(2); //false
isBoolean(false); //true
isBoolean('false'); //true
isBoolean('FALSE'); //false
isBoolean(0); //true
isBoolean(null); //false
isBoolean(undefined); //false
isBoolean(); //false
isBoolean(''); //false

布尔转换结果

var Boolify = require('node-boolify').Boolify;

Boolify(true); //true
Boolify('true'); //true
Boolify('TRUE'); //null
Boolify(1); //true
Boolify(2); //null
Boolify(false); //false
Boolify('false'); //false
Boolify('FALSE'); //null
Boolify(0); //false
Boolify(null); //null
Boolify(undefined); //null
Boolify(); //null
Boolify(''); //null
于 2019-01-08T09:51:18.277 回答
0

我可能更喜欢

const parseMaybeBool = val =>
  typeof val === 'string'
    ? val.toLowerCase() === 'true' || val.toLowerCase() === 'false'
      ? Boolean(val)
      : val
    : val;

或 w/ 类型

const isBool = (val: unknown): val is boolean =>
  typeof val === 'boolean' ||
  (typeof val === 'string' &&
    (val.toLowerCase() === 'true' || val.toLowerCase() === 'false'));

const parseMaybeBool = (val: unknown) =>
  isBool(val) ? Boolean(val) : val;

于 2021-11-08T22:27:16.660 回答