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

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

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

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

8.6.2对象内部属性和方法

[[Class]]内部属性的值由此规范为每种内置对象定义。 主机对象的[[Class]]内部属性的值可以是除“Arguments”,“Array”,“Boolean”,“Date”,“Error”,“Function”,“JSON”之一之外的任何String值。 ,“Math”,“Number”,“Object”,“RegExp”“String” 。 内部使用[[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]"

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

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

使用typeof。

 if (typeof foo == 'string') 
 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!"); } 

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

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

它会返回false!

但如果我们尝试:

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

它会返回true。

typeof('yourstring');// returns string

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

参考: 这里 。

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