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