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]" |
如果你使用
但如果使用上述方法,则可以得到正确的结果
你可以用
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!"); } |
。
我认为我们不需要把
1 | new String('abc')==='abc' |
。
它将返回错误!
但如果我们尝试:
1 | String('abc')==='abc' |
它将返回真。
1 | ('str'.constructor === String) && alert('its a string!'); |
。
使用
参考号:这里。
江户十一〔四〕号