2010-12-11 19 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

+0

素晴らしい答えをいただきありがとうございます。これをtypeofの使用方法と比較してコメントできますか? –

+0

@pure_code良い説明http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/ –

0

私はinstanceofのは、あなたが探しているものだと思います。この記事を参照してください。What is the instanceof operator in JavaScript?

+1

これは、オブジェクトに変換された文字列に対してのみ機能します。プリミティブではなく、 '' new String( "test") 'を使用します。 –

3

次のコードは、trueを返します:

"somestring".constructor == String 
+0

ありがとう:-)これは素晴らしい作品です。単純な答え+1。 – Bojangles

+0

+1これはObjectに変換された文字列に対しても有効です。 –

+0

@ box9 - ありがとう! – decyclone

2

これはあなたが後にしている何ですか?

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

} else { 


} 

そして、lengthは間違いなく行く方法です。配列には長さプロパティもありますが、カスタムオブジェクトもそうではありません。

+0

+1は '.length'を使わないようにしてくれます.-アドバイスありがとう:-) – Bojangles

0

JavaScriptには2種類の文字列があります。両方の種類がチェックされます。

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

JavaScriptが(Short-circuit evaluationを参照)を左から右に評価されるためtypeofは、エラーをスローしませんが、引数が宣言されていない場合、これは、常にReferenceErrorをスローします。

関連する問題