源码解析中看到的奇淫巧技
一、 数组重置
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
时间: 2024-10-05 05:07:36