JS-将字符串值转换为数字,布尔值或字符串的最佳方法?

时间:2018-09-29 05:01:47

标签: javascript casting

正如标题所述,我正在尝试构建一个以字符串值作为输入的函数,它返回正确转换的值。

到目前为止,我认为这看起来很丑,并且感觉可以通过更好的方法解决。

示例:

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);

让我知道是否有我没有考虑到的情况。

2 个答案:

答案 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)