2010-12-11 193 views
1

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

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

只要我可以测试字符串,jQuery分支可以在else - 我不需要绝对确定它不是一个字符串,虽然它可以很好地测试它是否也是jQuery。

感谢,

詹姆斯

回答

3
Object.prototype.toString.call(your_argument) == "[object String]" 
+0

感谢:-)我尝试了decyclone的回答,并且有点麻烦。你的工作很棒。 – Bojangles 2010-12-11 11:58:28

+0

感谢您的出色答案,您可以评论这与使用typeof相比如何? – 2013-01-15 16:49:04

+0

@pure_code很好的解释http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/ – 2013-01-16 15:37:32

0

我觉得}这种是你在找什么。看到这个帖子:What is the instanceof operator in JavaScript?

+1

这只适用于转换成对象的字符串,例如通过'new String(“test”)',而不是原语。 – 2010-12-11 11:03:25

3

下面的代码返回true:

"somestring".constructor == String 
+0

谢谢:-)这很好。 +1为简单的答案。 – Bojangles 2010-12-11 11:03:55

+0

+1比我的回答更好,因为这适用于转换为对象的字符串。 – 2010-12-11 11:10:01

+0

@ box9 - 谢谢! – decyclone 2010-12-11 12:20:19

2

这是你以后在做什么?

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

} else { 


} 

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

+0

+1告诉我不要使用'.length' - 感谢您的建议:-) – Bojangles 2010-12-11 11:04:18

0

JavaScript有两种字符串。这检查了两种。

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

这将始终抛出ReferenceError,如果该参数不宣虽然typeof不会抛出一个错误,因为JavaScript的由左到右(见Short-circuit evaluation)计算。