关于javascript:如何检测变量是否为字符串

how to detect if variable is a string

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


这是ECMAScript规范中指定的确定内部[[类]]属性的方法。

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

从8.6.2对象内部属性和方法:

The value of the [[Class]] internal property is defined by this specification for every kind of built-in object. The value of the [[Class]] internal property of a host object may be any String value except one of"Arguments","Array","Boolean","Date","Error","Function","JSON","Math","Number","Object","RegExp", and"String". The value of a [[Class]] internal property is used internally to distinguish different kinds of objects. Note that this specification does not provide any means for a program to access that value except through Object.prototype.toString (see 15.2.4.2).

有关这一功能的示例,请考虑以下示例:

1
2
3
4
5
var str = new String('some string');

alert( typeof str ); //"object"

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

如果你使用typeof,你会得到"object"

但如果使用上述方法,则可以得到正确的结果"[object String]"


你可以用typeof来做,但对于很多事情来说,这是一个糟糕的设计。

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


使用typeof。

1
if (typeof foo == 'string')


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

或者简单地说:

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


我认为我们不需要把new String('some string')当作一个字符串,因为如果我们尝试:

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

它将返回错误!

但如果我们尝试:

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

它将返回真。


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


使用alert(typeof"hello");。埃多克斯1〔6〕

参考号:这里。


江户十一〔四〕号