zoukankan      html  css  js  c++  java
  • JavaScript 中typeof、instanceof 与 constructor 的区别?

    typeof、instanceof 与 constructor 详解

    typeof  一元运算符

    返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.

    语法:typeof(data) 或 typeof data

    实例:

    var test = [123, true, "abc", {}, function() {}];
    for(var i = 0; i <= test.length; i++) {
        console.log(typeof test[i]);
    }
    //            number
    //            boolean
    //            string
    //            object
    //            function
    //            undefine
    注: typeof null == object  

    instanceof  二元运算符

    返回一个布尔值,该值指示一个对象是否为特定类的一个实例。

    语法: object instanceof class

    如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 class 存在于对象的原型链中(为 true),则该运算符返回 true。如果 object 不是 class 的实例,或 object 为 null,则该运算符返回 false。

    其本质是判断  class.prototype 是否存在于object对象的原型链上,关于原型链请点击这里

    实例:

    function A(){
                    
    }
    var a = new A();
    console.log( a instanceof A);//true
    console.log(a instanceof Object);//true

    constructor 属性,存在于Object.prototype的属性

    返回对象的构造函数

    语法: object.constructor

    返回值是函数的引用,不是函数名:

     JavaScript 数组 constructor 属性返回 function Array() { [native code] }

     JavaScript 数字 constructor 属性返回 function Number() { [native code] } 

    JavaScript 字符串 constructor 属性返回 returns function String() { [native code] } 

    如果一个变量是数组你可以使用 constructor 属性来定义。

    实例:

    function A(){
                    
    }
    var a = new A();
    console.log(a.constructor,a.constructor === A);    //true
    console.log(a.constructor === Object);    //false
    	
    对象的构造器 constructor 是可以改变的,但我们一般不建议这样做,因为这样会使程序的逻辑混乱。

    实例:

                function A(){
                    
                }
                function B(){
                    
                }
                A.prototype.constructor = B;
                var a = new A();
                console.log(a.constructor,a.constructor === A);    //false
                console.log(a.constructor === B);    //true





  • 相关阅读:
    File Size(4.12)
    Ownership of New Files and Directories(4.6)
    Changing User IDs and Group IDs & How saved setuserid works (8.11)
    Windows 下硬盘安装linux 系统
    access Function(4.7)
    File Access Permissions(4.5)
    link, unlink, remove, and rename Functions(4.15)
    文件特殊权限: SUID, SGID, SBIT
    ASP.NET与DreamweaverMx结合
    sqlserver的几个函数要记录
  • 原文地址:https://www.cnblogs.com/fanlinqiang/p/7741213.html
Copyright © 2011-2022 走看看