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

Posted SmallW

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码解析中看到的奇淫巧技相关的知识,希望对你有一定的参考价值。

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

一、 数组重置


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

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

以上是关于源码解析中看到的奇淫巧技的主要内容,如果未能解决你的问题,请参考以下文章

奇淫巧技XSS绕过技巧

python奇淫巧技

奇淫巧技-vue缓存接口数据

[asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的

奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2

JAVA开发奇淫巧技