js中typeof和instanceof的区别+必须熟记于心的JavaScript数据类型 — 第3.4 章

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值