VarがJavaScriptの文字列かどうかを確認するにはどうすればよいですか?
私はこれを試しましたが、うまくいきません...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
あなたは近かった:
if (typeof a_string === 'string') {
// this is a string
}
関連する注意:文字列がnew String('hello')
で作成された場合、型は代わりにObject
になるため、上記のチェックは機能しません。この問題を回避するための複雑なソリューションがありますが、そのような方法で文字列を作成しないようにすることをお勧めします。
typeof
演算子は中置ではありません(例のLHSは意味をなしません)。
次のように使用する必要があります...
if (typeof a_string == 'string') {
// This is a string.
}
typeof
は関数ではなく演算子であることを忘れないでください。それにもかかわらず、野生でtypeof(var)
が頻繁に使用されているのがわかります。これはvar a = 4 + (1)
と同じくらい理にかなっています。
また、両方のオペランドがString
s(typeof
alwaysはString
を返す)であるため、==
(等値比較演算子)を使用することもできます。同じ手順で===
(厳密な比較演算子)を使用していました。
Box9の言及 のように、これは 検出されない インスタンス化されたString
オブジェクトです。
でそれを検出できます。
var isString = str instanceof String;
jsFiddle 。
...または...
var isString = str.constructor == String;
jsFiddle 。
しかし、これは、複数のwindow
環境では機能しません(iframe
sを考えてください)。
あなたはこれを回避することができます...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle 。
しかし、( Box9の言及 のように)リテラルString
形式を使用するだけの方が良いでしょう。 var str = 'I am a string';
。
さらに読む 。
前の回答を組み合わせることにより、これらのソリューションが提供されます。
if (typeof str == 'string' || str instanceof String)
または
Object.prototype.toString.call(str) == '[object String]'
今ではtypeof()の関数形式を使用することが好ましいと考えています...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
次の式は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) {
...
}
すべての場合にnullまたは未定義を確認しますa_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}