如何检测变量是否为字符串
如何检测变量是否为字符串?
这是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!');