typeof和instanceof的区别 +JS数据类型
相信大家学习了,很多门编程语言,但是扪心自问一下,你真的很了解你所学的语言吗?对于写了这么长时间js的我来说,这是第一次能够静下心来,真正为了学习而学习的时候!
就拿JavaScript语言来说,它虽然是一门弱类型语言,但是,我认为,不管它是什么语言,至少在我们学习的时候,要清楚地记得,它的数据类型分哪几类,每一类又分为哪几种!
废话不多说,转起你的大脑,让你理解 + 记忆的小宇宙爆发吧!下面来看一下,面试必问的,而你又模糊不清的东西!
1. ECMAScript中数据类型分为哪几类?每一类又分为哪几种?
<1>: 从广义上说ECMAScript的数据类型分为2大种:基本数据类 型 和 复杂数据类型 (或复合数据类型);
<2>: 基本数据类型又分为5种——:number,string,boolean,undefined,null;
<3>: 复杂数据类型——object;
<4>: 综上所述:狭义上说JavaScript的数据类型分为6种。
2. typeof操作符的返回值有哪几种?
typeof的返回值有6种,分别为:number,string、boolean、undefined、function、object(注意:typeof null的返回值是object,也就是说,null是一个对象!);
下面请看我亲测的typeof实例代码:
var num1 = 22,
str1 = 'bangbang',
bol1 = true,
obj1 = {name:'bangbang',age:18},
arr1 = [1,2,3],
fun = function(){alert(1)},
n = null,
m;
console.log(typeof num1); //number
console.log(typeof str1); //string
console.log(typeof bol1); //boolean
console.log(typeof obj1); //object
console.log(typeof arr1); //object
console.log(typeof n); //object
console.log(typeof fun); //function
console.log(typeof m); //undefined
以上typeof只能够判断出是哪一种基本数据类型或者是否为复杂数据类型,但是当它判断,是哪一种复杂数据类型(即引用类型)的时候就力不从心了,为此,我们就不得不使用instanceof来判断是哪一种复杂类型。
3. instanceof操作符的返回值有哪些?它有什么用途呢?
首先,不要迷糊,instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上—— 好吧,还是再翻译一下:instanceof 运算符用来检测 obj.prototype.constructor 是否和产生obj的构造函数相同——再换句话说:instanceof用来检测一个对象是否为某个构造函数的实例,如果变量是给定的引用类型,就返回true。以下是instanceof的使用方法:
result = variable instaceof constructor;//true or false
一个对象是否为某个函数的实例:
function Person() {}
var me = new Person();
console.log(me instanceof Person); //true
console.log(me instanceof Person.prototype.constructor); //true
//以下是证明
console.log(Person.prototype);//obj :由Person创建出来的对象的原型对象
console.log(Person.prototype.constructor);//function Person(){}
console.log(Person === Person.prototype.constructor); //true
接下来还有一个实例,供自己深入了解:
function test1(){
console.log('I am bangbang');
}
var test2 = /abc/g;
console.log(typeof test1) //function
console.log(test1 instanceof Object); //true
console.log(test1 instanceof Array); //false
console.log(test2 instanceof RegExp); //true
console.log(test2 instanceof Object); //ture