如何检测变量是否为字符串

时间:2011-02-03 21:28:57

标签: javascript jquery

如何检测变量是否为字符串?

8 个答案:

答案 0 :(得分:33)

这是ECMAScript规范中指定的方式,用于确定内部[[Class]]属性。

if( Object.prototype.toString.call(myvar) == '[object String]' ) {
   // a string
}

From 8.6.2 Object Internal Properties and Methods:

  

[[Class]]内部属性的值由此规范为每种内置对象定义。主机对象的[[Class]]内部属性的值可以是除“Arguments”,“Array”,“Boolean”,“Date”,“Error”,“Function”之一之外的任何String值, “JSON”,“数学”,“数字”,“对象”,“RegExp”,“字符串”。内部使用[[Class]]内部属性的值来区分不同类型的对象。请注意,除了通过Object.prototype.toString之外,此规范不提供程序访问该值的任何方法(参见15.2.4.2)。


有关如何使用它的示例,请考虑以下示例:

var str = new String('some string');

alert( typeof str ); // "object"

alert( Object.prototype.toString.call(str) ); // "[object String]"

如果您使用typeof,则会获得"object"

但是如果你使用上面的方法,你会得到正确的结果"[object String]"

答案 1 :(得分:17)

您可以使用typeof来执行此操作,但对于很多事情来说这是糟糕的设计。

if (typeof myVar == "string") {
    alert("I'm a string!");
}

答案 2 :(得分:5)

使用typeof。

if (typeof foo == 'string')

答案 3 :(得分:3)

var str = new String("some string");
if(str.constructor.name === "String") 
     {
        alert("I'm a string!");
      }

或简单地说:

if(str.constructor === String) 
     {
        alert("I'm a string!");
      }

答案 4 :(得分:2)

我认为我们不需要将new String('some string')视为字符串,因为如果我们尝试:

new String('abc')==='abc'

它将返回false!

但如果我们尝试:

String('abc')==='abc'

它将返回true。

答案 5 :(得分:0)

typeof('yourstring');// returns string

答案 6 :(得分:0)

使用alert(typeof "hello");     alert(typeof 123);

参考:here

答案 7 :(得分:0)

('str'.constructor === String) && alert('its a string!');