typeof 和 instanceof的用法和区别

typeof和instanceof判断变量,typeof会返回一个变量的基本类型,大概有以下几种

String    Number    boolean     function   undefined   symbol   object(null,数组,对象)

typeof 可以用来区分除了 Null 类型以外的原始数据类型 如下:

typeof undefined // "undefined"
typeof null // "object"
typeof 1 // "number"
typeof "1" // "string"
typeof Symbol() // "symbol" 
typeof function() {} // "function" 
typeof {} // "object"
typeof(undefined)//不存在的变量、函数或者 undefined,将返回 undefined
typeof console.log // function
typeof NaN // number

typeof 遇到null,数组,对象都会返回object类型。比如 typeof(window),typeof(document), typeof(null)返回的值都是 object,所以无法用typeof来判断一个object是否是数组或对象。这时我们可以使用instanceof,instanceof返回的是一个布尔值

var x = {};
console.log(x instanceof Object);  //true
var m = [];
console.log(m instanceof Array);  //true

需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等,如:

var a = '123';
console.log(a instanceof String);  //false
console.log(typeof a);  //string
var b = new String("123");
console.log(b instanceof String);  //true
console.log(typeof b);  //object

instanceof 用于判断某个对象是否被另一个函数构造

instanceof是检测对象的原型链是否指向构造函数的prototype对象的

var arr = [1,2,3]; 
alert(arr instanceof Array);   // true

区别数组和对象的方法还有:

方法一:通过 ES6 中的 Array.isArray 来识别

Array.isArray([]) //true
Array.isArray({}) //false

方法二:通过 instanceof 来识别

[] instanceof Array //true
{} instanceof Array //false

方法三:通过调用 constructor 来识别

{}.constructor //返回 object
[].constructor //返回 Array

方法四:通过 Object.prototype.toString.call 方法来识别

Object.prototype.toString.call([]) //["object Array"]
Object.prototype.toString.call({}) //["object Object"]

总结:

  1. typeof运算符是判断对象的类型typeof 运算符返回一个用来表示表达式的数据类型的字符串,但遇到null,数组,对象都会返回object类型。
  2. 当需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof 。
  3.  instanceof 用于判断一个变量是否某个对象的实例,instanceof返回的是一个布尔值 ,只能用来判断对象和函数,不能用来判断字符串和数字等。
  4. Instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型

Supongo que te gusta

Origin blog.csdn.net/H_hl2021/article/details/122129513
Recomendado
Clasificación