有没有更好的方法来改进下面的语句来检查是否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();
}
有没有更好的方法来改进下面的语句来检查是否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();
}
最易读:
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);
试试JSON.parse()。
"true"
并且"false"
实际上是,的json 表示。这就是 ajax 将 json 对象解析为来自服务器端的字符串的方式。如果在服务器端,我们返回 true, false => 浏览器将接收它作为字符串“true”或“false”(json 表示)true
false
if ( $(this).val() == "true" || $(this).val() == "false") {
ao[id] = JSON.parse($(this).val());
}else {
ao[id] = $(this).val();
}
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();
}
这可能会更优雅一些:
var thisval = $(this).val();
if (thisval === "true" || thisval === "false") {
thisval = (thisval === "true");
}
('' + 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')
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 的建议更新了代码。谢谢!
在 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
我可能更喜欢
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;