• JavaScript类型检测, typeof操作符与constructor属性的异同


    *#type.js

    function Person(name, age) {
    	this.name = name;
    	this.age = age;
    }
    
    var d = {an: 'object'};
    var a = ['apple', 'banana'];
    var f = function() {};
    var s = 'David';
    var n = 33;
    var b = true;
    var o = new Object();
    var person = new Person('Mark', 22);
    
    console.log(typeof(d) + ': ' + d.constructor);
    console.log(typeof(a) + ': ' + a.constructor);
    console.log(typeof(f) + ': ' + f.constructor);
    console.log(typeof(s) + ': ' + s.constructor);
    console.log(typeof(n) + ': ' + n.constructor);
    console.log(typeof(b) + ': ' + b.constructor);
    console.log(typeof(o) + ': ' + o.constructor);
    console.log(typeof(person) + ': ' + person.constructor);
    
    

    运行$node type.js

    object:   function Object() { [native code] }
    object:   function Array() { [native code] }
    function: function Function() { [native code] }
    string:   function String() { [native code] }
    number:   function Number() { [native code] }
    boolean:  function Boolean() { [native code] }
    object:   function Object() { [native code] }
    object:   function Person() { [native code] }
    
    

    可见, 使用typeof操作符和constucor属性检测对象类型返回值是存在差异的.

    1. 如果变量是数组, typeof操作符返回object, constructor属性返回Array;
    2. 如果变量是构造函数对象, typeof操作符返回object, constructor属性返回该构造函数

    每个变量都有其construcor属性, 这个属性不单单提供了这个是否对象, 还提供了这个对象是什么类型的对象. 总之, constructor属性保存了一个指向对象的构造函数, 无论它是自定义的还是原生类型的对象.

    有一点需要注意的是, 不同的浏览器对typeof操作符检测正则表达式会有所不同,IE和Firefox会返回'object'.

  • 相关阅读:
    JDK自带keytool工具配置HTTPS加密协议
    利用 GOST 搭建加密中转隧道(UDP+TCP)
    Linux登录报错-bash: /etc/profile: Permission denied
    转:Windows server 2008 R2 更新补丁失败进入恢复模式
    转:Windows server 2008R2更新补丁后进入系统恢复
    转:CENTOS创建IP白名单
    centos6 离线升级openssh防止断开
    关闭oracle一直等待
    Java并发容器
    Java对象序列化
  • 原文地址:https://www.cnblogs.com/lozio/p/4299786.html
Copyright © 2020-2023  润新知