如何检查var是否是JavaScript中的字符串?

vit*_*tto 166 javascript string variable-types

如何检查var是否是JavaScript中的字符串?

我试过这个但它不起作用......

var a_string = "Hello, I'm a string.";

if (a_string typeof 'string') {
    // this is a string
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ang 354

你很亲密:

if (typeof a_string === 'string') {
    // this is a string
}
Run Code Online (Sandbox Code Playgroud)

在相关的注释:如果创建一个字符串,上面的检查将不起作用,new String('hello')因为类型将是Object.有很复杂的解决方案可以解决这个问题,但最好还是避免以这种方式创建字符串.

  • 这对我有用 `if(typeof(str) === typeof(String())) ` (3认同)
  • 伙计们,我真的会给你们两个都接受的答案,但我不能,我所能做的就是对两者+1,而不是在谁更接近我的具体问题时给出公认的答案,我没有充分解释。 (2认同)

ale*_*lex 74

typeof运营商不中缀(所以你的榜样的LHS没有意义).

你需要像这样使用它......

if (typeof a_string == 'string') {
    // This is a string.
}
Run Code Online (Sandbox Code Playgroud)

记住,typeof是一个操作员,而不是一个功能.尽管如此,你会看到typeof(var)在野外使用了很多.这就像有意义一样var a = 4 + (1).

此外,您也可以使用==(等式比较运算符),因为两个操作数都是Strings(typeof 总是返回a String),JavaScript定义为执行我使用的相同步骤===(严格比较运算符).

正如Box9所提到的,这不会检测实例化的String对象.

你可以通过....检测到它

var isString = str instanceof String;
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

...要么...

var isString = str.constructor == String;
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

但这不适用于多种window环境(思考iframe).

你可以用...来解决这个问题

var isString = Object.prototype.toString.call(str) == '[object String]';
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

但同样,(如Box9所提到的),你最好只使用文字String格式,例如var str = 'I am a string';.

进一步阅读.

  • @RobG Rep上限是指您在一个24小时内获得最大代表.在那之后,upvotes不计入你的声誉. (3认同)

Alf*_*ton 14

结合以前的答案提供了以下解决方案:

if (typeof str == 'string' || str instanceof String)
Run Code Online (Sandbox Code Playgroud)

要么

Object.prototype.toString.call(str) == '[object String]'
Run Code Online (Sandbox Code Playgroud)


red*_*sko 6

以下表达式返回true

'qwe'.constructor === String
Run Code Online (Sandbox Code Playgroud)

以下表达式返回true

typeof 'qwe' === 'string'
Run Code Online (Sandbox Code Playgroud)

以下表达式返回false(原文如此!):

typeof new String('qwe') === 'string'
Run Code Online (Sandbox Code Playgroud)

以下表达式返回true

typeof new String('qwe').valueOf() === 'string'
Run Code Online (Sandbox Code Playgroud)

最好和正确的方式(恕我直言):

if (someVariable.constructor === String) {
   ...
}
Run Code Online (Sandbox Code Playgroud)