On the Difference and Development of js typeof and instanceof Judgement Data Types
- 2021-11-29 06:09:13
- OfStack
Foreword:
In daily development, we often encounter the situation of judging the data type of a variable or whether the variable is null. How do you choose the operator to judge the type? This article summarizes what we developers must master about Record 1
typeof
And
instanceof
Knowledge points and suggestions for use in development, and often encounter such problems in the interview process.
1. typeof Operator
typeof
Operator to determine the data type of any variable, specifically, it is the best way to determine whether a variable is a string, numeric value, Boolean value or undefined. Its return value is of string type and is used as follows:
typeof
Is an operator, not a function, but you can pass variables as parameters:
a、typeof operand
b、typeof (operand)
(1) The return value is of string type, where:
返回值 |
含义值 |
"undefined" |
未定义 |
"boolean" |
布尔值 |
"string" |
字符串 |
"number" |
数值 |
"object" |
对象(而不是函数)或 null |
"function" |
函数 |
"symbol" |
符号 |
(2) Common usage methods
console.log(typeof undefined);//'undefined'
console.log(typeof true);//'bpplean'
console.log(typeof ("number")); //'string'
console.log(typeof "number"); //'string'
console.log(typeof 1);//'number'
console.log(typeof Symbol());//'symbol'
// For Array , Null And other special objects use typeof1 Rhythm return object , this is exactly typeof Limitations of
console.log(typeof null); //'object'
console.log(typeof [1, 2, 3]);//'object'
console.log(typeof undefined); //'undefined'
// Pass typeof Operator to distinguish functions from other objects
function f1() { console.log(111); }
console.log(typeof f1); //'function'
console.log(typeof f1()); // 111 'undefined'
(3) The existence of a variable cannot be judged by typeof
var a;
if (a === undefined) {
console.log(" Variable does not exist ")
} else {
console.log(" Existence of variables ")
}
// Variable does not exist
2. instanceof operator
typeof
Although useful for raw values, it is of little use for referenced values. We usually don't care if a value is an object, but we want to know what kind of object it is. To solve this problem,
ECMAScript
Provides
instanceof
Operator. Use the following:
function f1() { console.log(111); }
console.log(f1 instanceof Object);//true
console.log(f1 instanceof Function);//true
console.log(f1 instanceof RegExp);//false
All reference values are
Object
Instance of, so pass the
instanceof
Operator detects any reference value and
Object
Constructor returns
true
.
instanceof
Is detected, the original value is always returned
false
Because the original value is not an object.
instanceof
Operator is used to determine the
prototype
Property appears anywhere in the prototype chain of the object. Its implementation principle is as follows:
function myInstanceof(left, right) {
let proto = Object.getPrototypeOf(left), // Get the prototype of the object
prototype = right.prototype; // Object of the constructor prototype Object
// Determines the constructor's prototype Whether the object is on the prototype chain of the object
while (true) {
if (!proto) return false;
if (proto === prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
3. Differences between typeof and instanceof and suggestions for use in development
typeof
And
instance
They are all methods to judge data types, with the following differences:
typeof
Returns the basic type of 1 variable,
instanceof
Returns 1 Boolean value
instanceof
It can accurately judge the complex reference data type, but it can't correctly judge the basic data type
And
typeof
There are drawbacks, although it can judge the underlying data type (
null
Except for the reference data type, but in the reference data type, except for the
function
Other than the type, other things can't be judged
It can be seen that the above two methods have drawbacks and cannot meet the needs of all scenarios
If a common test data type is required, it is recommended to use
Object.prototype.toString
This method is called, and the format is returned by unified 1
“[object Xxx]”
The string of the. Use the following:
console.log(Object.prototype.toString.call(undefined)) //"[object Undefined]"
console.log(Object.prototype.toString.call(true)) // "[object Boolean]"
console.log(Object.prototype.toString.call('1')) // "[object String]"
console.log(Object.prototype.toString.call(1)) // "[object Number]"
console.log(Object.prototype.toString.call(Symbol())) // "[object Symbol]"
console.log(Object.prototype.toString.call({})) // "[object Object]"
console.log(Object.prototype.toString.call(function () { })) // "[object Function]"
console.log(Object.prototype.toString.call([])) //"[object Array]"
console.log(Object.prototype.toString.call(null)) //"[object Null]"
console.log(Object.prototype.toString.call(/123/g)) //"[object RegExp]"
console.log(Object.prototype.toString.call(new Date())) //"[object Date]"
Summary: