如何在Javascript中确定字符串内表达式的类型?

问题描述 投票:1回答:4

我有一个休息调用,它给我查询参数的信息,我需要确定它们是字符串还是int,数组,布尔值。

例如,如果我有:

/.../something?ID=1

我会收到'1',但我知道这是一个整数。

此外,我有:

/.../something?ID=[1,2,3]

我会收到'[1,2,3]',但我知道这是一个数组。最后,如果我有:

/.../something?ID=string

我将收到'string',我应该将它用作常规字符串。

正则表达式是对每种类型进行检查的唯一方法吗?

javascript rest
4个回答
2
投票

你可以使用JSON.parse和catch块。

var options = ['12', '[1,2,3]', 'string', 'false', '{"x" : 2}', '/hey/', /hey/];

var parsed = options.map(x => {
    try {
        return JSON.parse(x)
    } catch(e) {
        return x;
    }

});

var types = parsed.map(x => /\[object (.*)\]$/.exec(Object.prototype.toString.call(x))[1])

console.log(types);

1
投票

一旦你有一个value

var value = "1"; //or whatever value after `id=`

你可以应用这个逻辑

var type = "";
var isNum = ( s ) => !isNaN(s);
var isObject = ( s ) => {
   try { s = JSON.parse(s); return Array.isArray(s) ? "array" : "object" } catch( e ){ return false }
};

现在用它们作为

type = isNum( value ) ? "number" : ( isObject( s ) || "string" );

注意

  • 如果value是一个函数定义,它仍然会返回一个string

0
投票

解决此问题的一种方法是使用反复试验方法:

  1. 如果你有从[开始并以]结尾的值,你可能会认为它是一个数组。使用JSON.parse可以肯定。
  2. 如果第一种情况不匹配,请使用/^\d+$/根据整数值测试字符串。使用parseInt()可以肯定。
  3. 最后,如果上面两个测试用例都失败了,你可以确定它是一个字符串,因为字符串可以容纳几乎所有类型的值。

0
投票

萨维奥,

您可以处理它的一种方法是获取值并使用带有'typeof'的switch / case语句来查看它们是什么。

Typeof explanation on MDN

// Numbers

typeof 37 === 'number';
typeof 3.14 === 'number';

// Strings
typeof 'bla' === 'string';

// Booleans
typeof true === 'boolean';

// use Array.isArray or Object.prototype.toString.call
// to differentiate regular objects from arrays
typeof [1, 2, 4] === 'object';
© www.soinside.com 2019 - 2024. All rights reserved.