【问题标题】:Checking if an argument a string检查参数是否为字符串
【发布时间】:2011-05-23 21:55:57
【问题描述】:

我有一个使用 document.getElementById() 的 JavaScript 函数。我想升级它以便能够使用 jQuery 选择器 ($(this).parent().find("blah")),但是它需要能够使用原始方法以实现向后兼容性。有没有一种方法可以测试传递给函数的参数是字符串(所以我可以使用getElementById)还是 jQuery 对象(不是字符串)。

我可以使用.length,但这是确定参数是否为字符串的故障安全方法吗?

只要我可以测试字符串,jQuery 分支就可以进入else - 我不需要绝对确定它不是字符串,尽管测试它是否也是 jQuery 会很好。

谢谢,

詹姆斯

【问题讨论】:

    标签: javascript jquery variable-types


    【解决方案1】:

    JavaScript 有两种字符串。这会检查这两种类型。

    function isString (str)
    {
      return str instanceof String || typeof str === 'string';
    }
    

    如果参数未声明,这将始终抛出 ReferenceError,尽管 typeof 不会抛出错误,因为 JavaScript 从左到右计算(参见 Short-circuit evaluation)。

    【讨论】:

      【解决方案2】:
      Object.prototype.toString.call(your_argument) == "[object String]"
      

      【讨论】:

      • 谢谢 :-) 我尝试了 decyclone 的回答,但遇到了一些麻烦。不过你的效果很好。
      • 感谢您的出色回答,您能评论一下这与使用 typeof 相比如何吗?
      【解决方案3】:

      这就是你所追求的吗?

      var str = "blah";
      if (typeof str == "string") {
      
      } else {
      
      
      }
      

      length 绝对不是要走的路。数组也会有一个长度属性,更不用说任何自定义对象了。

      【讨论】:

      • +1 告诉我不要使用 .length - 感谢您的建议 :-)
      【解决方案4】:

      以下代码返回 true:

      "somestring".constructor == String
      

      【讨论】:

      • +1 比我的答案更好,因为这也适用于转换为对象的字符串。
      【解决方案5】:

      我认为 instanceOf 是您正在寻找的。看到这个帖子:What is the instanceof operator in JavaScript?

      【讨论】:

      • 这仅适用于转换为对象的字符串,例如通过new String("test"),而不是原语。
      猜你喜欢
      • 2023-01-29
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多