typeof与instanceof用法小记

JavaScript中typeof instanceof常用老判断一个变量是否为空,或者是什么类型的。但是他们之间还是有区别的

1. typeof

typeof是一个一元运算,放在一个运算数之前,运算数可以是任意类型
它返回值是一个字符串,该字符串说明运算符的类型
typeof一般只能返回如下几个结果:“number”,“string”,“boolean”,“object”,“function”,“undefined”.

    <script type="text/javascript">
        var str = "hhhh";
        var num = 12334;
        var obj = {};
        var fn = function(){
            console.log(11111)
        }
        var arr = [];
        var boolea = false;
        var a = null;
        var b;
        //            string       number      object     function     object      boolean     object   undefined
        console.log(typeof str, typeof(num), typeof obj, typeof fn, typeof arr, typeof boolea, typeof a, typeof b)
    </script>

即我们可以通过typeof判断一个变量是否存在。例如

if(typeof a!="undefined"){alert("ok")}

而不要去使用if(a),因为如果a不存在(为声明)则会报错。对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组.

if(document.mylist.length != "undefined" ) {} //这个用法有误.

正确的是
if( typeof(document.mylist.length) != "undefined" ) {}

或 if( !isNaN(document.mylist.length) ) {}

在JavaScript中,判断一个变量的类型常常会用typeof运算符,在使用该运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,他都返回”object“,这时就要用到instanceof

2. instanceof 检测某个对象是不是另一个对象的实例,即测试一个对象在其原型链中是否存在一个构造函数的prototype属性

语法: object(要检测是对象) instanceof constructor(某个构造函数)
如 :var a=new Array();

alert(a instanceof Array); // true,

同时 alert(a instanceof Object) //也会返回 true;

这是因为 Array 是 object 的子类。

再如:function test(){};

var a=new test();

alert(a instanceof test) 会返回true

另外,更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

例如:

function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继承
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true

上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,218评论 6 13
  • 魔鬼和天使(一) 有一位美丽的天使, 她的名字叫奶格玛。 她来自宇宙源头一个叫娑萨朗的光明净土, 在那里生活着她的...
    静静印心阅读 284评论 1 1
  • 中世纪欧洲仆人的标准敬礼姿势是:行礼时须脱帽,右手握住帽前檐中央将帽取下。右手垂下后身体对正,用立正姿势,双目 注...
    AA闫现召阅读 806评论 2 1
  • 糟糕的一天,不知道这整个一天是如何过的,还把最重的接孩子也耽搁了,搞的被大男人教育了一个晚上,作罢!凌晨2...
    幽兰依依阅读 123评论 1 2
  • 本有从大连到西安的直达火车,马晓白却并不着急时间,来大连时是从烟台坐的轮渡,他现在便又想去坐一坐那轮渡,到达烟台后...
    马晓白阅读 508评论 2 1