正如标题所述,我正在尝试构建一个以字符串值作为输入的函数,它返回正确转换的值。
到目前为止,我认为这看起来很丑,并且感觉可以通过更好的方法解决。
示例:
const smartCast = function (value) {
if (value === 'true') {
return true;
}
if (value === 'false') {
return false;
}
if (!isNaN(value)) {
return Number(value);
}
return value;
};
console.log(smartCast('ahoy!') === 'ahoy!');
console.log(smartCast('hello there') === 'hello there');
console.log(smartCast('412') === 412);
console.log(smartCast('71.3') === 71.3);
console.log(smartCast('true') === true);
console.log(smartCast('false') === false);
让我知道是否有我没有考虑到的情况。
答案 0 :(得分:1)
function cast(value) {
if (typeof value !== 'string')
return value
// Ignore values that would start an array or object.
if (/^\s*[{\[]/.test(value))
return value
try {
// Try to parse as some value.
return JSON.parse(value)
} catch(e) {
// If there's an error, we will assume it is just
// a string.
}
return value
}
console.log(typeof cast('false')) // boolean
console.log(typeof cast('true')) // boolean
console.log(typeof cast('1')) // number
console.log(typeof cast('3.14')) // number
console.log(typeof cast('abc')) // string
console.log(typeof cast('[1,2,3]')) // string
console.log(typeof cast('{"abc":1}')) // string
答案 1 :(得分:0)