回答:
あなたは近かった:
if (typeof a_string === 'string') {
// this is a string
}
関連する注記:上記のチェックは、文字列が作成された場合、代わりにnew String('hello')
タイプが作成されると機能しませんObject
。これを回避するための複雑な解決策がありますが、これまでと同じように文字列を作成しないことをお勧めします。
if(typeof(str) === typeof(String()))
typeof
オペレータは、(あなたの例のLHSは意味がありませんので)中置ではありません。
あなたはそのようにそれを使う必要があります...
if (typeof a_string == 'string') {
// This is a string.
}
覚えておいてください、typeof
演算子、関数ではなく。これにもかかわらず、あなたはtypeof(var)
野生でよく使われているのを見るでしょう。これはと同じくらい意味がありvar a = 4 + (1)
ます。
また、==
両方のオペランドがString
s(typeof
常に a を返す)であるため(等価比較演算子)を使用することもできます。JavaScriptはString
、私が使用したのと同じ手順を実行するように定義されています===
(厳密比較演算子)。
以下のようBox9は言及し、これは検出されませんインスタンス化String
オブジェクトを。
あなたはそれでそれを検出することができます...
var isString = str instanceof String;
...または...
var isString = str.constructor == String;
しかし、これはマルチwindow
環境では機能しません(iframe
s と考えてください)。
あなたはこれで回避することができます...
var isString = Object.prototype.toString.call(str) == '[object String]';
ただし、繰り返しになりますが(Box9で言及されているように)、リテラルString
形式(たとえば)を使用するほうがよいでしょうvar str = 'I am a string';
。
if(myVar.toUpperCase) alert('I am a string');
?参照:jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
今日では、typeof()の関数形式を使用する方が好ましいと思うので...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
ありません。括弧で操作の順序を制御するだけです。一部の人々は、特定の状況でそれを読みやすくするかもしれません。
filename
は単一のステートメントのみをグループ化するため、役に立たず無関係です。この回答のスコアが0であるのは、間違いであり、誤解を招き、役に立たないため、良いことです。負のスコアがあった方がいいでしょう。
すべてのケースでnullまたはundefinedをチェックします
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
そして、typeof undefined
返すことはありません'string'
ので、typeof a_string
十分です。ネクロポスティングで申し訳ありません
私の個人的なアプローチは、すべてのケースで機能するように見えますが、すべて文字列に対してのみ存在するメンバーの存在をテストすることです。
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
参照:http : //jsfiddle.net/x75uy0o6/
この方法に欠陥があるかどうか知りたいのですが、何年にもわたって役立ってきました。