• 源码解析中看到的奇淫巧技


    源码解析中看到的奇淫巧技

    一、 数组重置

    
    let arr = [123,123]
    arr.length  // 2
    arr.length = 0
    arr  		// []
    
    

    当我们给数组的length 属性设置成 0 。那么数组就会被重置为空。 (很神奇有木有

    二、 数据类型判断

    1、 判断是否为 undefined
    
    let isUndef = function(v) {
    	return v === undefined || v === null
    }
    
    2、 判断是否 不为空
    
    let isDef = function(v) {
    	return v !== undefined && v !== null
    }
    
    3、 判断是否为 原始数据类型
    
    let isPrimitive = function(value) {
      return typeof value === 'string' || typeof value === 'number' ||
      typeof value === 'symbol' || typeof value === 'boolean';
    }
    
    4、 判断是否为 Object 类型
    
    let isPrimitive = function(value) {
      return obj !== null && typeof obj === 'object';
    }
    

    基础复习:

    数据类型: 基础类型 和 引用类型。 其中基础数据类型包含了 null、undefined、Boolean、String、Number、symbol
    引用类型: Function 、Array、Object

    这里重点介绍一下 symbol

    Symbol

    ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。
    详情: 阮一峰解析 Symbol

    这篇文章中比较详尽 的介绍了 Symbol 十一种 用法之多。 但是核心的思想就是 防止 属性名 冲突 导致莫名其妙的问题

    三、 对象类型判断

    1、 判断是否为 原始对象
    const _toString = Object.prototype.toString;  // 继承对象的原始方法
    
    let isPlainObject = function(obj) {
    	return _toString.call(obj) === '[object Object]';
    }
    
    2、 判断是否为 正则对象
    const _toString = Object.prototype.toString;  // 继承对象的原始方法
    
    let isRegExp= function(v) {
    	return _toString.call(v) === '[object RegExp]';
    }
    

    等等等 太多了。 后面看到好玩了,我们再持续来更新这篇文章~

  • 相关阅读:
    大话数据结构--学习目录
    C语言中的 i++ 和 ++i 的区别
    木紫洁,加油
    vue在组件中使用v-model
    vue的v-model指令原理分析
    表格强制换行 table-layout:fixed
    vue引入jquery插件
    vue中使用stylus编写css
    Java单链表简单实现* @version 1.0
    Java中的面向对象I
  • 原文地址:https://www.cnblogs.com/erbingbing/p/8780293.html
Copyright © 2020-2023  润新知