zoukankan      html  css  js  c++  java
  • js-数据类型

    最近在看视频学习,把相关的知识记录,汇总一下,

    js的原始数据类型包含五种:number、string、boolean、null、undefined

    还有一个大家常见到的也就是object(Date、Function、Array等)

    如何判断类型,主要有以下几种:typeof、instanceof、Object.prototype.toString、constructor、duck type

    1)typeof:适合判断函数和基本类型的判断,例如:

      typeof 1-》‘number’,

      typeof true-》‘boolean’,

      typeof function-》‘function’,

      typeof undefined-》‘undefined’,

      typeof new Object()-》‘object’,

      typeof [1,2]-》‘object’,

      typeof NaN-》‘number’,

      typeof null-》‘object’(历史遗留问题)

    发现没有,对基本类型比较合适,遇到数组,还是object,无法精确区分object,这时候引入instanceof(基于原型链prototype)

    2)instanceof:obj instanceof Object 适合判断对象类型(基于原型链prototype)

    举个例子:

    var child = function (){};
    var parent = function (){};
    child.prototype = new parent();
    var c = new child();
    var p = new parent();
    document.write(c instanceof parent);//true

    有关prototype,可以查询相关的文档,以后我也会在博客中总结一下前人总结的特点

    简单说一下这个例子,每一个实例对象(c,p)都有一个_proto_属性(原型属性),他们会指向自己对象(child,parent)的prototype

    第一步,会判断c的_proto_指向的child的prototype是否等于parent的prototype,不等于,

    第二步,继续找c的上一级的原型,前面定义了child.prototype = new parent();也就是说c的_proto_的_proto_跟parent的prototype是一样的,这里就返回true了

    3)Object.prototype.toString:适合内置对象和基本元素,注意ie的兼容(ie6,7,8 返回[object Object])

    例如:

    Object.prototype.toString.apply([])==='[object Array]';

    Object.prototype.toString.apply(function(){})==='[object Function]';

    Object.prototype.toString.apply(null)==='[object Null]';

    Object.prototype.toString.apply(undefined)==='[object Undefined]';

    这里简单查一下jq的类型判断的部分源码:

    type: function( obj ) {
        return obj == null ? String( obj ) : class2type[ toString.call(obj) ] || "object";
    },
    isFunction: function( obj ) {
        return jQuery.type(obj) === "function";
    },
    isArray: Array.isArray || function( obj ) {
        return jQuery.type(obj) === "array";
    },
    jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
            class2type[ "[object " + name + "]" ] = name.toLowerCase();
     });

    这里我想说的就是jq的设计技巧,很巧妙的把我们用到的类型,用数组同统一封装一下,js的很多原生的方法在jq也定义了一下。这里借鉴一下这个思路

  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/aishangyizhihu/p/4212057.html
Copyright © 2011-2022 走看看