源码解析中看到的奇淫巧技
源码解析中看到的奇淫巧技
一、 数组重置
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
源码解析中看到的奇淫巧技相关推荐
- Java 线程池ThreadPoolExecutor的应用与源码解析
ThreadPoolExecutor 工作原理 假设corePool=5,队列大小为100,maxnumPoolSize为10 向线程池新提交一个任务,会根据ThreadFactory创建一个新的线程 ...
- [转]ViewPagerindicator 源码解析
转自:http://www.codekk.com/open-source-project-analysis/detail/Android/lightSky/ViewPagerindicator%20% ...
- 跟我学RocketMQ之批量消息发送源码解析
上篇文章 跟我学RocketMQ之消息发送源码解析 中,我们已经对普通消息的发送流程进行了详细的解释,但是由于篇幅问题没有展开讲解批量消息的发送.本文中,我们就一起来集中分析一下批量消息的发送是怎样的 ...
- FutureTask源码解析(2)——深入理解FutureTask 1
Future和Task 在深入分析源码之前,我们再来拎一下FutureTask到底是干嘛的.人如其名,FutureTask包含了Future和Task两部分. FutureTask实现了Runnabl ...
- MACE源码解析【ARM卷积篇(一) 】1*N和N*1卷积实现
MACE Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台优化的神经网络计算框架,旨在深度神经网络部署在移动端,是一个SoC上的神经网络实现.主要涉及的硬件 ...
- 源码解析-Volley(转自codeKK)
Volley 源码解析 本文为 Android 开源项目源码解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:grumo ...
- Spring源码解析(七)-Bean属性间的循环依赖
首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...
- 免Root 实现App加载Xposed插件的工具Xpatch源码解析(一)
前言 Xpatch是一款免Root实现App加载Xposed插件的工具,可以非常方便地实现App的逆向破解(再也不用改smali代码了),源码也已经上传到Github上,欢迎各位Fork and St ...
- Okio 源码解析 : 一套精简高效的 I/O 库
个人博客:https://blog.N0tExpectErr0r.cn 小专栏:https://xiaozhuanlan.com/N0tExpectErr0r 从前面的 OkHttp 源码解析中我们可 ...
最新文章
- 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!
- 查询linux kafka安装目录,Linux下安装并(单节点)配置启动Kafka
- 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建向社区贡献代码
- python减法怎么表示_python运算符号之一的减法怎么用,你真的学会用python的使用方法了嘛...
- kotlin之重载运算符(十一)
- Hadoop--ip和主机名配置
- ECCV 2020 目标检测与跟踪赛事,清华大学主办 GigaVision 2020 欢迎报名~
- 高帮足球鞋_高帮运动鞋和晕车症可以教给我们有关VR设计的知识
- python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解
- Matlab期货量化交易特征选取,【策略分享】Matlab量化交易策略源码分享
- (一)关于NLP的概念和处理过程
- cookies时效由谁决定_胎儿的性别,是什么时候定下来的,又是由谁决定的?
- 计算机职业素养论文1500字,提升道德素养论文_职业素养论文2000字_工程师职业素养结课论文1500字...
- php第三方支付宝支付,第三方对接-支付宝支付接入教程
- mysql 增加临时表空间_数据库临时表空间设置
- 虚幻引擎之自定义着色模型(ShadingModel)
- 安卓玩机搞机技巧综合资源---MIUI14全机型首版下载链接 刷机方法 获取root步骤【十二】
- 佐治亚大学计算机工程本科课程,美国大学本科专业排名:计算机工程.docx
- 制造系统的发展方向:收敛? 发散?
- mongo update批量更新