2011-08-16 10 views
1

Javascriptでvarの型をチェックする方法はたくさんあります。Javascriptではtypeof演算子のみを使用して型をチェックしていますか?

しかし、オペレータのタイプを使用すると、他の方法よりもかなり簡単です -

if(typeof someVar == typeof "") 

if(typeof someVar == typeof []) 


function myFunc() {} 

if(typeof someVar == typeof myFunc) 

これを実行するのは有効か悪いのですか?どうして?

ありがとうございます。

答えて

2

typeofは、使用するのにはまったく問題ありませんが、一般的なタイプのチェックには適していません。それはその目的ではありません。

typeof [] == "object" 

それだけ"object""function""undefined"とプリミティブ"boolean""number""string"を区別することができます。より高度なタイプチェックを行うには、instanceof以上の複雑なチェックを使用する必要があります。

[] instanceof Array // works reliably only if there's a single frame 
toString.call([]) == "[object Array]" // always works, but only with some types. 
+0

を返すObject.prototype.toStringを使用する必要があるかどうかをテストする文字列

したがって
typeof "my-string" // "string" typeof String('my-string') // 'string' typeof new String("my-string") // "object". 

ため、この例のテスト、を見てください複数のウィンドウオブジェクト(i/framesなど)がある場合、 'instanceof Array'テストは機能しません。 window.frames [0] .Array == window.frames [1] .Array'はfalseを返します。 –

+0

@JuanMendes:おっと!私はそれを言いたいと思っていたが、私のポストからいくつかの言葉が抜けてしまったように思える。編集。 –

0

あなたが値と型の両方を使用すると、===比較演算子を使用することができ、同じであるかどうかを確認する必要がある場合。ただし、タイプを確認する必要がある場合は、instanceofを使用するのが最も適切でしょう。

+0

w3schoolsの問題に追加しないでくださいhttp://w3fools.com –

+0

私はあなたに同意しますが、これはw3schoolsのすべてが不正確であるということを意味するものではありません。 StackOverflowがそうであるように、有用なリソースになることができます。 –

+0

ほとんどのWeb開発者はあなたに同意していませんノーマン、そこには正確な情報があるかもしれませんが、なぜ記述が曖昧で悪いコーディングスタイルを永続させるウェブサイトを参照し続けるのですか? –

2

typeofの主な問題の1つは、コンストラクタを使用してそれらのオブジェクトを作成すると、 "string"、 "boolean"、 "number"が返されないということです。引数または変数が文字列、ブール値、数は、あなたが一貫性のある結果

function isString(obj) { 
    return Object.prototype.toString.call(obj) == "[object String]"; 
} 
関連する問題