JSタイプ判定
3026 ワード
JSデータタイプ判定
時には判断データの種類が必要で、各種の複雑な論理判断に対応して、先に私達の最も常用したのに来ます.
1.typeof
typeofオペレータは文字列を返し、変数の種類を表します.
typeof oper/typeof(operand)
instance of演算子は、オブジェクトのプロトタイプ属性が、オブジェクトのプロトタイプチェーン内の任意の位置にあるかどうかをテストするために使用されます.一般的には、変数があるオブジェクトの例です.
object instance of construct
objectが検出する対象/construct配置関数
各オブジェクトには、一つのテキスト値として表示されるオブジェクト、または一つのオブジェクトが予定の文字列で参照されるときに自動的に呼び出しられます.デフォルトでは、toString()メソッドは各Objectオブジェクトに引き継がれます.この方法がカスタムオブジェクトに上書きされていない場合、toString()は「Object type」に戻り、typeはオブジェクトの種類です.
Funtion.prototype.call/Function.prototype.appy
検査対象を伝達することを最初のパラメータとして、thisArgといいます.
時には判断データの種類が必要で、各種の複雑な論理判断に対応して、先に私達の最も常用したのに来ます.
1.typeof
typeofオペレータは文字列を返し、変数の種類を表します.
typeof oper/typeof(operand)
var testString = 'adus',
testArray = [],
testBoolean = true,
testNumber = 0,
testObject = {},
testNull = null,
testUndefined = undefined
console.log(typeof testString);//string
console.log(typeof testArray);//object
console.log(typeof testBoolean);//boolean
console.log(typeof testNumber);//number
console.log(typeof testObjec);//object
console.log(typeof testNull);//object
console.log(typeof testUndefined);//undefined
もちろんこれらの基礎タイプだけではなく、以下のようなものもあります.
Symbol (ECMAScript 6 ) "symbol"
( JS ) Implementation-dependent
([[Call]] ECMA-262 ) "function"
えっ?ちょっと違っていますが、どうして配列やnullなどは全部objectですか?下を見てくださいFunction Array , Object 。 。
JavaScript ,JavaScript 。 0。
null ( 0x00)。
,null 0,typeof null "object"。(reference)
2.instance ofinstance of演算子は、オブジェクトのプロトタイプ属性が、オブジェクトのプロトタイプチェーン内の任意の位置にあるかどうかをテストするために使用されます.一般的には、変数があるオブジェクトの例です.
object instance of construct
objectが検出する対象/construct配置関数
function fnc(){}
var newFnc = new fnc();
console.log(newFnc.__proto__ == fnc.prototype);//true
console.log( newFnc instanceof fnc ) //true
/*String Date Object */
var simpleStr = "This is a simple string";
var myString = new String();
var newStr = new String("String created with constructor");
var myDate = new Date();
var myObj = {};
var myNonObj = Object.create(null);
simpleStr instanceof String; // false, undefined
myString instanceof String; // true
newStr instanceof String; // true
myString instanceof Object; // true
myObj instanceof Object; // true,
({}) instanceof Object; // true,
myNonObj instanceof Object; // false, , Object
myString instanceof Date; // false
myDate instanceof Date; // true
myDate instanceof Object; // true
myDate instanceof String; // false
3.Object.prototype.toString()各オブジェクトには、一つのテキスト値として表示されるオブジェクト、または一つのオブジェクトが予定の文字列で参照されるときに自動的に呼び出しられます.デフォルトでは、toString()メソッドは各Objectオブジェクトに引き継がれます.この方法がカスタムオブジェクトに上書きされていない場合、toString()は「Object type」に戻り、typeはオブジェクトの種類です.
Funtion.prototype.call/Function.prototype.appy
検査対象を伝達することを最初のパラメータとして、thisArgといいます.
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
適切な場面で適切な方法を使うと、手間が省けますし、コードの簡潔さ、丈夫さも保証できます.