如何检测变量是不是为字符串
Posted
技术标签:
【中文标题】如何检测变量是不是为字符串【英文标题】:how to detect if variable is a string如何检测变量是否为字符串 【发布时间】:2011-06-20 23:41:27 【问题描述】:如何检测变量是否为字符串?
【问题讨论】:
你可能想使用 underscore.js,它在documentcloud.github.com/underscore/#isString 中有内置的方法——如果是 isString,它使用 user113716 提到的方法 Check if a variable is a string的可能重复 Check whether variable is number or string in javascript的可能重复 【参考方案1】:这是 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
【参考方案2】:
你可以使用typeof
来做这件事,但是对于很多事情来说这是一个糟糕的设计。
if (typeof myVar == "string")
alert("I'm a string!");
【讨论】:
取决于您要执行的操作。通常,您应该知道您收到的是什么类型,或者这无关紧要(即,无论类型如何,您都会对它做同样的事情)。【参考方案3】:使用 typeof。
if (typeof foo == 'string')
【讨论】:
在示例中不使用关键字作为变量可能更清楚。【参考方案4】:我认为我们不需要将new String('some string')
视为字符串,因为如果我们尝试:
new String('abc')==='abc'
它会返回 false!
但如果我们尝试:
String('abc')==='abc'
它将返回 true。
【讨论】:
【参考方案5】: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!");
【讨论】:
【参考方案6】:typeof('yourstring');// returns string
【讨论】:
【参考方案7】:使用alert(typeof "hello");
alert(typeof 123);
参考:here。
【讨论】:
【参考方案8】:('str'.constructor === String) && alert('its a string!');
【讨论】:
【参考方案9】:使用下划线:
_.isString(yourVariable)
下划线是一个JS库:https://underscorejs.org/
【讨论】:
我收到了一个参考错误_ is not defined
。你能指定它是否需要包/特定的 jQuery 版本吗?
我提到了“使用下划线”。下划线是一个 JS 库:underscorejs.org/#notes以上是关于如何检测变量是不是为字符串的主要内容,如果未能解决你的问题,请参考以下文章