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

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

一、 数组重置


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

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

posted @ 2018-04-10 16:32  SmallW  阅读(619)  评论(0编辑  收藏  举报