1。機能:
TypeOF演算子は、式のデータ型を表す文字列を返します。
考えられる文字列は、「数字」、「文字列」、「ブールン」、「オブジェクト」、「関数」、「未定義」です。
2。一般的に使用される返品値の説明
| 表現 | 返品値 |
| 未定義のタイプ | '未定義' |
| typeof null | '物体' |
| typeof true | 「ブール」 |
| タイプ123 | '番号' |
| タイプの「ABC」 | '弦' |
| typeof function(){} | '関数' |
| typeof {} | '物体' |
| typeof [] | '物体' |
| 未知の可変のタイプ | '未定義' |
注:タイプの戻り値はすべて文字列であり、それらはすべて小文字ヘッダーです。
3。定期的なアプリケーション:
1)。変数が存在し、値があるかどうかを確認します。
TypeOFは、2つのケースで「未定義」を返します。変数が宣言されていない場合、および変数の値が未定義の場合。例えば:
> typeof undeclaredvariable === "未定義" true
> var宣言されたvar;
> typeof宣言されたvariable「未定義」
>未定義の「未定義」のタイプ
値が未定義かどうかを検出する他の方法があります。
> var値=未定義;
> value ===未定義の真
ただし、このメソッドが未宣言されていない変数で使用されている場合、型のみがエラーを報告せずに宣言されていない変数を通常検出できるため、例外がスローされます。
>非eClaredVariable ===未定義の参照エラー:非宣言者は定義されていません
注:非初期化された変数、パラメーターに渡されない正式なパラメーター、および存在しないプロパティは、常にアクセス可能であり、値は常に未定義であるため、上記の問題はありません。
> var宣言されたvar;
> declaredvariable ===未定義の真
>(function(x){return x === undefined}())true
>({})。foo ===未定義の真
注:したがって、if(window.maybeundeclaredvariable){}
質問:そのようなタスクを完了すると、TypeOFが複雑に思われます。
解決策:この種の操作はあまり一般的ではないため、より良い解決策を見つける必要がないと考える人もいます。ただし、誰かが特別なオペレーターを提案する場合があります。
>定義されている未宣言者の誤り
> var宣言されたvar;
>定義された宣言されたVariable False
または、変数が宣言されているかどうかを検出するオペレーターが必要な場合があります。
>宣言されていない非宣言されていない偽の虚偽
> var宣言されたvar;
>宣言された宣言されたvariable True
翻訳者のメモ:Perlでは、上記の定義された演算子は定義された()に相当し、上記の宣言された演算子は存在()に相当します。
2。値が未定義に等しくなく、nullに等しくないと判断します
質問:値が定義されているかどうか(値が未定義でもnullでもない)を検出したい場合、Typeofの奇妙な顕現(バグと見なされる)に遭遇しました。
> typeof null 'オブジェクト'
注:これは、元のJavaScriptの実装のバグとのみ言われ、標準が標準化されています。 v8は、1回of of null === "null"を修正して実装しましたが、最終的に実行不可能であることが判明しました。 http://wiki.ecmascript.org/doku.php?id = harmony:typeof_null
解決策: TYPEOFを使用してこのタスクを実行しないでください。代わりに次の方法を使用します。ただし、変数Xを事前に宣言する必要があります。そうしないと、エラーが報告されます。
関数isdefined(x){return x!== null && x!== undefined; }
別の可能性は、「デフォルト値オペレーター」を導入することです。 myValueが定義されていない場合、次の式はdefaultValueを返します。
myvalue || defaultValue
上記の式は次のと同等です。
(myvalue!== undefined && myvalue!== null)? myValue:defaultValue
実際、それは次の声明の単純化です。
myValue = myValue || defaultValue
3。オブジェクト値と元の値を区別します
次の関数は、xがオブジェクト値であるかどうかを検出するために使用されます。
function isobject(x){return(typeof x === "function" ||(typeof x === "object" && x!== null)); }
問題:TypeOFが関数とオブジェクトをさまざまなタイプとして扱い、TypeOF Nullが「オブジェクト」を返すため、上記の検出はより複雑です。
解決策:オブジェクト値を検出するために、次の方法もよく使用されます。
function isobject2(x){return x === object(x); }
警告:オブジェクトのインスタンスを使用してここで検出できると考えるかもしれませんが、インスタンスは、オブジェクトを使用してプロトタイプを使用してインスタンス関係を判断するために使用されます。したがって、プロトタイプなしでオブジェクトがある場合はどうすればよいですか:
> var obj = object.create(null);
> object.getPrototypeof(obj)null
OBJは確かにオブジェクトですが、それは価値のインスタンスではありません。
> typeof obj 'オブジェクト'
> OBJ instanceofオブジェクトfalse
実際には、そのようなオブジェクトに遭遇することはめったにありませんが、それは存在し、その目的があります。
翻訳者のメモ:Object.Prototypeは、デフォルトで存在し、プロトタイプを持たないオブジェクトです。
> object.getPrototypeof(object.prototype)null
> typeof object.prototype 'object'
> object.prototype instanceof object false
4.元の値のタイプは何ですか?
TypeOFは、特定の元の値のタイプを表示する最良の方法です。
> typeof "abc" 'string'
>未定義の「未定義」のタイプ
質問:Typeof Nullの奇妙な動作を知っている必要があります。
> typeof null //注意してください! '物体'
解決策:次の関数は、この問題を修正できます(このユースケースのみ)。
関数getPrimitiveTypename(x){
var typename = typeof x;
switch(typename){
ケース「未定義」:case "boolean":case "number":case "string":return typename;
case "object":if(x === null){return "null"; }
デフォルト://以前の判断は、新しいTypeErrorをスローすることに失敗しました( "パラメーターは原始値ではありません:"+x);
}}
より良いソリューション:関数getTypename()を実装します。これは、元の値のタイプを返すだけでなく、オブジェクト値の内部[[class]]属性を返すことができます。ここでは、この関数を実装する方法について説明します(翻訳者の注:$ .Type in JQueryはこのような実装です)
5.値が関数であるかどうか
TypeOFを使用して、値が関数であるかどうかを検出できます。
> typeof function(){} 'function'
> typeof object.prototype.toString 'function'
原則として、Instanceof関数はこの種の要件検出を実行することもできます。一見すると、文章はよりエレガントなようです。ただし、ブラウザには癖があります。各フレームワークとウィンドウには、独自のグローバル変数があります。したがって、特定のフレームワークのオブジェクトを別のフレームワークに渡す場合、2つのフレームワークには異なるコンストラクターがあるため、IntanceOFは適切に機能しません。これが、ecmascript5にarray.isarray()メソッドがある理由です。オブジェクトが特定のコンストラクターのインスタンスであるかどうかを確認するためのフレームワークを介して交差する方法がある場合、それは素晴らしいことです。上記のgetTypename()は回避策ですが、より基本的なソリューションがあるかもしれません。
6。概要
以下は、現在JavaScriptで最も緊急のニーズである必要があり、TYPEOFの現在の責任のいくつかの機能的特徴を置き換えることができます。
isdefined()(object.isdefined()などなど:関数または演算子として使用できます
isobject()
gettypename()
オブジェクトがフレームワーク全体の指定されたコンストラクターのインスタンスであるかどうかを検出できるメカニズム
このような要件について変数が宣言されているかどうかを確認するには、独自のオペレーターを持つ必要がない場合があります。
JSのTypeOFの使用に関する上記の要約は、エディターが共有するコンテンツ全体です。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。