js中typeof与instanceof

1.typeof
typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)判断,因为如果a不存在(未声明)则会出错,typeof的运算数未定义,返回的就是 “undefined”.
运算数为数字       typeof(123)=='number'

字符串                  typeof("123")=='string'

布尔值                  typeof(true)=='boolean'

对象,数组和null    typeof(对象,函数或者null值) = “object” 

函数                     typeof(一个函数) = “function” 

undefined            typeof(undefined)="undefined"

typeof 运算符返回一个用来表示表达式的数据类型的字符串。

对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

2.instanceof
instanceof用于判断一个对象是否是数组,或判断某个变量是否是某个对象的实例
例如:var a=new Array();  console.log(a instanceof Array);                        //true
           console.log(a instanceof Object);                                                     //true,这是因为Array是object的子类
再如:function test(){};  var a=new test();  console.log(a instanceof test);  //true

上面a instanceof Object 得到true并不是因为 Array是Object的子对象,而是因为 Array的prototype属性构造于Object,Array的父级是Function。


补充说明:

Array.prototype 应该是叫做“数组的原型”。在 JS 中所有使用new创建的对象,都会生成一个以这个函数为原型的对象,比如arr = new Array。表现就是arr.__proto__ === Array.prototype。只是new Object,new Array,new Function, new RegExp等都有其他的写法。
当访问一个对象的属性,比如arr.toString,其实访问的是arr.toString? arr._proto_.toString? arr._proto_._proto_.toString?....(按照这个顺序查找到的第一个)。又因为arr.__proto__ === Array.prototype,而Array.prototype具有toString,所以arr.toString访问的就是这里定义的那个函数,这样就实现了继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值