【问题标题】:how to detect if variable is a string如何检测变量是否为字符串
【发布时间】:2011-06-20 23:41:27
【问题描述】:

如何检测变量是否为字符串?

【问题讨论】:

标签: javascript jquery


【解决方案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
            猜你喜欢
            • 2020-05-28
            • 2012-04-13
            • 2019-01-25
            • 2013-12-15
            • 2023-02-06
            • 1970-01-01
            • 1970-01-01
            • 2011-06-18
            • 1970-01-01
            相关资源
            最近更新 更多