web-dev-qa-db-ja.com

varがJavaScriptの文字列かどうかを確認するにはどうすればよいですか?

VarがJavaScriptの文字列かどうかを確認するにはどうすればよいですか?

私はこれを試しましたが、うまくいきません...

var a_string = "Hello, I'm a string.";

if (a_string typeof 'string') {
    // this is a string
}
154
vitto

あなたは近かった:

if (typeof a_string === 'string') {
    // this is a string
}

関連する注意:文字列がnew String('hello')で作成された場合、型は代わりにObjectになるため、上記のチェックは機能しません。この問題を回避するための複雑なソリューションがありますが、そのような方法で文字列を作成しないようにすることをお勧めします。

335
David Tang

typeof 演算子は中置ではありません(例のLHSは意味をなしません)。

次のように使用する必要があります...

if (typeof a_string == 'string') {
    // This is a string.
}

typeofは関数ではなく演算子であることを忘れないでください。それにもかかわらず、野生でtypeof(var)が頻繁に使用されているのがわかります。これはvar a = 4 + (1)と同じくらい理にかなっています。

また、両方のオペランドがStrings(typeofalwaysStringを返す)であるため、==(等値比較演算子)を使用することもできます。同じ手順で===(厳密な比較演算子)を使用していました。

Box9の言及 のように、これは 検出されない インスタンス化されたStringオブジェクトです。

でそれを検出できます。

var isString = str instanceof String;

jsFiddle

...または...

var isString = str.constructor == String;

jsFiddle

しかし、これは、複数のwindow環境では機能しません(iframesを考えてください)。

あなたはこれを回避することができます...

var isString = Object.prototype.toString.call(str) == '[object String]';

jsFiddle

しかし、( Box9の言及 のように)リテラルString形式を使用するだけの方が良いでしょう。 var str = 'I am a string';

さらに読む

71
alex

前の回答を組み合わせることにより、これらのソリューションが提供されます。

if (typeof str == 'string' || str instanceof String)

または

Object.prototype.toString.call(str) == '[object String]'
10
Alf Eaton

今ではtypeof()の関数形式を使用することが好ましいと考えています...

if(filename === undefined || typeof(filename) !== "string" || filename === "") {
   console.log("no filename aborted.");
   return;
}
1
Master James

次の式はtrueを返します。

'qwe'.constructor === String

次の式はtrueを返します。

typeof 'qwe' === 'string'

次の式はfalse(sic!)を返します。

typeof new String('qwe') === 'string'

次の式はtrueを返します。

typeof new String('qwe').valueOf() === 'string'

最善かつ正しい方法(imho):

if (someVariable.constructor === String) {
   ...
}
1
redisko

すべての場合にnullまたは未定義を確認しますa_string

if (a_string && typeof a_string === 'string') {
    // this is a string and it is not null or undefined.
}
0
Kurkula