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

一、 数组重置


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]';
}

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

转载于:https://www.cnblogs.com/erbingbing/p/8780293.html

源码解析中看到的奇淫巧技相关推荐

  1. Java 线程池ThreadPoolExecutor的应用与源码解析

    ThreadPoolExecutor 工作原理 假设corePool=5,队列大小为100,maxnumPoolSize为10 向线程池新提交一个任务,会根据ThreadFactory创建一个新的线程 ...

  2. [转]ViewPagerindicator 源码解析

    转自:http://www.codekk.com/open-source-project-analysis/detail/Android/lightSky/ViewPagerindicator%20% ...

  3. 跟我学RocketMQ之批量消息发送源码解析

    上篇文章 跟我学RocketMQ之消息发送源码解析 中,我们已经对普通消息的发送流程进行了详细的解释,但是由于篇幅问题没有展开讲解批量消息的发送.本文中,我们就一起来集中分析一下批量消息的发送是怎样的 ...

  4. FutureTask源码解析(2)——深入理解FutureTask 1

    Future和Task 在深入分析源码之前,我们再来拎一下FutureTask到底是干嘛的.人如其名,FutureTask包含了Future和Task两部分. FutureTask实现了Runnabl ...

  5. MACE源码解析【ARM卷积篇(一) 】1*N和N*1卷积实现

    MACE Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台优化的神经网络计算框架,旨在深度神经网络部署在移动端,是一个SoC上的神经网络实现.主要涉及的硬件 ...

  6. 源码解析-Volley(转自codeKK)

    Volley 源码解析 本文为 Android 开源项目源码解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:grumo ...

  7. Spring源码解析(七)-Bean属性间的循环依赖

    首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...

  8. 免Root 实现App加载Xposed插件的工具Xpatch源码解析(一)

    前言 Xpatch是一款免Root实现App加载Xposed插件的工具,可以非常方便地实现App的逆向破解(再也不用改smali代码了),源码也已经上传到Github上,欢迎各位Fork and St ...

  9. Okio 源码解析 : 一套精简高效的 I/O 库

    个人博客:https://blog.N0tExpectErr0r.cn 小专栏:https://xiaozhuanlan.com/N0tExpectErr0r 从前面的 OkHttp 源码解析中我们可 ...

最新文章

  1. 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!
  2. 查询linux kafka安装目录,Linux下安装并(单节点)配置启动Kafka
  3. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建向社区贡献代码
  4. python减法怎么表示_python运算符号之一的减法怎么用,你真的学会用python的使用方法了嘛...
  5. kotlin之重载运算符(十一)
  6. Hadoop--ip和主机名配置
  7. ECCV 2020 目标检测与跟踪赛事,清华大学主办 GigaVision 2020 欢迎报名~
  8. 高帮足球鞋_高帮运动鞋和晕车症可以教给我们有关VR设计的知识
  9. python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解
  10. Matlab期货量化交易特征选取,【策略分享】Matlab量化交易策略源码分享
  11. (一)关于NLP的概念和处理过程
  12. cookies时效由谁决定_胎儿的性别,是什么时候定下来的,又是由谁决定的?
  13. 计算机职业素养论文1500字,提升道德素养论文_职业素养论文2000字_工程师职业素养结课论文1500字...
  14. php第三方支付宝支付,第三方对接-支付宝支付接入教程
  15. mysql 增加临时表空间_数据库临时表空间设置
  16. 虚幻引擎之自定义着色模型(ShadingModel)
  17. 安卓玩机搞机技巧综合资源---MIUI14全机型首版下载链接 刷机方法 获取root步骤【十二】
  18. 佐治亚大学计算机工程本科课程,美国大学本科专业排名:计算机工程.docx
  19. 制造系统的发展方向:收敛? 发散?
  20. mongo update批量更新

热门文章

  1. 【原创醒目】终极之决战CSDN专家分【抢分醒目】
  2. Linux子网IP扫描
  3. 今天太阳了一条狗!大悲咒走起
  4. [Matlab科学绘图] Matlab三维绘图总结
  5. 运动控制学习 学习笔记(八)——定义和评价学习
  6. keytool 查看apk 签名信息
  7. 3 GROM 关联 (golang)
  8. 【深度学习基础知识 - 21】加快模型训练速度的方法
  9. 报告 | 《2022年数据隐私统计、事实与趋势》,涵盖26项数据隐私统计数据
  10. 通过lsof命令恢复rm -rf 误删的文件