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

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() 生成一个包含一系列索引属性的对象,每个属性的值对应于该位置的字符。是的,它将通过ObjecttoString 方法强制转换为字符串,但事实仍然是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

以上是关于如何检测变量是不是为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何检测指定数量是不是为 NaN 以及如何[重复]

java判断字符串是不是超出utf8编码

js如何判断变量的数据类型

如何检测变量中的字符串

如何检测变量是不是为数组

如何检测变量是不是为数组