【发布时间】:2011-06-20 23:41:27
【问题描述】:
如何检测变量是否为字符串?
【问题讨论】:
-
你可能想使用 underscore.js,它在documentcloud.github.com/underscore/#isString 中有内置的方法——如果是 isString,它使用 user113716 提到的方法
标签: javascript jquery
如何检测变量是否为字符串?
【问题讨论】:
标签: javascript jquery
这是 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”、 “JSON”、“数学”、“数字”、“对象”、“正则表达式”、 和 “字符串”。 [[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]"。
【讨论】:
new String() 生成一个包含一系列索引属性的对象,每个属性的值对应于该位置的字符。是的,它将通过Object 的toString 方法强制转换为字符串,但事实仍然是new String('some string') 本身不是字符串。 typeof someString === "string" 是确定变量是否为字符串的正确方法。一个变量是否可以变成一个字符串是没有意义的;每个可以追踪其原型链到Object 的对象都有toString
你可以使用typeof 来做这件事,但是对于很多事情来说这是一个糟糕的设计。
if (typeof myVar == "string") {
alert("I'm a string!");
}
【讨论】:
使用 typeof。
if (typeof foo == 'string')
【讨论】:
我认为我们不需要将new String('some string') 视为字符串,因为如果我们尝试:
new String('abc')==='abc'
它会返回 false!
但如果我们尝试:
String('abc')==='abc'
它将返回 true。
【讨论】:
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!");
}
【讨论】:
typeof('yourstring');// returns string
【讨论】:
使用alert(typeof "hello");
alert(typeof 123);
参考:here。
【讨论】:
('str'.constructor === String) && alert('its a string!');
【讨论】:
【讨论】:
_ is not defined。你能指定它是否需要包/特定的 jQuery 版本吗?