js函数 eql,equal,equalp
function eql(obj, other) {
        if(stringp(obj) && stringp(other) && obj === other) return false;
        return obj === other;
    }
function equal(obj, other, equalp) {
    if (equalp === void 0) { equalp = false; }
    var _tostring = function (value) { return Object.prototype.toString.call(value); };
    var emptyp = function (value) {
        return JSON.stringify(value).length === 2 ? true : false;
    };
    function Equal(obj, other, equalp) {
        var objTag = _tostring(obj);
        var otherTag = _tostring(other);
        var objectTag = '[object Object]';
        var arrayTag = '[object Array]';
        if (objTag !== objectTag && objTag !== arrayTag && otherTag !== objectTag && otherTag !== arrayTag) {
            if (equalp && typeof obj === 'string' && typeof other === 'string') {
                return (obj).toLocaleUpperCase() === (other).toLocaleUpperCase();
            }
            return obj === other;
        }
        if (objTag !== otherTag)
            return false; // 集合类型不一样
        if (Object.getOwnPropertyNames(obj).length !== Object.getOwnPropertyNames(other).length)
            return false; // 集合元素数量不一样
        if (emptyp(obj) && emptyp(other))
            return true; // 类型一样的空集合,永远相等。
        var data = (function () {
            var data = Object.getOwnPropertyNames(obj);
            if (objTag === arrayTag) {
                data.pop();
                return data;
            }
            else {
                return data;
            }
        })();
        for (var i in data) {
            var k = data[i];
            if (k in other) { // 元素是否相交
                var obj_value = obj[k];
                var other_value = other[k];
                var obj_item_tag = _tostring(obj_value);
                var other_item_tag = _tostring(other_value);
                if (obj_item_tag === other_item_tag) {
                    if (obj_item_tag === objectTag || obj_item_tag === arrayTag || other_item_tag === objectTag || other_item_tag === arrayTag) {
                        return Equal(obj_value, other_value, equalp);
                    }
                    else {
                        if (obj_value === other_value) {
                            console_1.log('done.');
                        }
                        else {
                            return false;
                        }
                    }
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
        return true;
    }
    return Equal(obj, other, equalp);
}
function equalp(obj, other) {
    return equal(obj, other, true);
}
调试
import {
    log as l
} from 'console';
function eql(obj: any, other: any) {
    return obj === other;
}
function equal(obj: any, other: any, equalp: boolean = false) {
    const _tostring = (value: any): string => Object.prototype.toString.call(value);
    const emptyp = function (value: any) {
        return JSON.stringify(value).length === 2 ? true : false;
    }
    function Equal(obj: any, other: any, equalp: boolean): boolean {
        let objTag = _tostring(obj);
        let otherTag = _tostring(other);
        let objectTag = '[object Object]'
        let arrayTag = '[object Array]'
        if (objTag !== objectTag && objTag !== arrayTag && otherTag !== objectTag && otherTag !== arrayTag) {
            if (equalp && typeof obj === 'string' && typeof other === 'string') {
                return (obj).toLocaleUpperCase() === (other).toLocaleUpperCase();
            }
            return obj === other;
        }
        if (objTag !== otherTag) return false;// 集合类型不一样
        if (Object.getOwnPropertyNames(obj).length !== Object.getOwnPropertyNames(other).length) return false; // 集合元素数量不一样
        if (emptyp(obj) && emptyp(other)) return true; // 类型一样的空集合,永远相等。
        let data: any[] = (function () {
            let data = Object.getOwnPropertyNames(obj);
            if (objTag === arrayTag) {
                data.pop()
                return data
            } else {
                return data
            }
        })()
        for (const i in data) {
            const k = data[i];
            if (k in other) { // 元素是否相交
                let obj_value = obj[k];
                let other_value = other[k];
                let obj_item_tag = _tostring(obj_value);
                let other_item_tag = _tostring(other_value);
                if (obj_item_tag === other_item_tag) {
                    if (obj_item_tag === objectTag || obj_item_tag === arrayTag || other_item_tag === objectTag || other_item_tag === arrayTag) {
                        return Equal(obj_value, other_value, equalp);
                    } else {
                        if (obj_value === other_value) {
                            l('done.');
                        } else {
                            return false;
                        }
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        return true;
    }
    return Equal(obj, other, equalp)
}
function equalp(obj: any, other: any) {
    return equal(obj, other, true);
}
l(equalp('hello', 'HELLo'))
function equal(obj, other) {
  const objectTag = "[object Object]";
  const arrayTag = "[object Array]";
  const _tostring = value => Object.prototype.toString.call(value);
  const emptyp = value => JSON.stringify(value).length === 2;
  // 记录所有的对象
  function Equal(obj, other) {
    let objTag = _tostring(obj);
    let otherTag = _tostring(other);
    // 非集合,使用===判断
    if (
      objTag !== objectTag &&
      objTag !== arrayTag &&
      otherTag !== objectTag &&
      otherTag !== arrayTag
    ) {
      return obj === other;
    }
    // 集合类型不一样
    if (objTag !== otherTag) return false;
    // 集合元素数量不一样
    if (
      Object.getOwnPropertyNames(obj).length !==
      Object.getOwnPropertyNames(other).length
    )
      return false;
    // 类型一样的空集合,永远相等。
    if (emptyp(obj) && emptyp(other)) return true;
    let rsult = false;
    for (const k in obj) {
      if (k in other) {
        const obj_value = obj[k];
        const other_value = other[k];
        rsult = Equal(obj_value, other_value);
      } else {
        return false;
      }
    }
    return rsult;
  }
  return Equal(obj, other);
}
js函数 eql,equal,equalp的更多相关文章
- api日常总结:前端常用js函数和CSS常用技巧
		我的移动端media html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font- ... 
- 3.3 js函数
		1.函数语法: 函数声明的方式:function 函数名(参数1,参数2-){//函数体;}函数调用:函数名(参数1,参数2-); 函数内不一定都指定返回值. 如果需要指定返回值,可用 return ... 
- Js函数function基础理解
		正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ... 
- js函数表达式和函数声明的区别
		我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ... 
- 通用js函数集锦<来源于网络> 【二】
		通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ... 
- 通用js函数集锦<来源于网络/自己> 【一】
		通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ... 
- 100多个基础常用JS函数和语法集合大全
		网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ... 
- JS函数
		1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个浏 ... 
- js函数和运算符
		函数是由事件驱动或者它被调用时执行可重复使用的代码块. <script> function myFunction(){ Alert(“hello World!”): } </scri ... 
随机推荐
- 转: chrome64打开弹出窗flash的办法
			https://jingyan.baidu.com/article/380abd0a38f0411d90192c2e.html 
- 快速排序partition过程常见的两种写法+快速排序非递归实现
			这里不详细说明快速排序的原理,具体可参考here 快速排序主要是partition的过程,partition最常用有以下两种写法 第一种: int mypartition(vector<int& ... 
- LeetCode Permutations问题详解
			题目一 permutations 题目描述 Given a collection of numbers, return all possible permutations. For example,[ ... 
- window7开启Administrator账户
			需求描述: 在工作遇见,安装部分软件,对目录不具有写权限.为了彻底解决问题.启用Administrator账户! 问题解决: 激活Administrator账户,并设置密码 重启系统,用Adminis ... 
- MongoDB中MapReduce介绍与使用
			一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ... 
- 11G新特性 --  ASM的兼容性
			Oracle 11g中,asm同时支持10g和11g数据库.但是asm的版本不能低于数据库的版本. 与兼容性现相关的两个参数: ·compatible.rdbms 支持的最低版本的oracle数据库版 ... 
- 2. RNN神经网络模型的不同结构
			1. RNN神经网络模型原理 2. RNN神经网络模型的不同结构 3. RNN神经网络-LSTM模型结构 1. 前言 RNN( Recurrent Neural Network 循环(递归)神经网络) ... 
- Spring Security 使用数据库用户进行认证
			本文参考或摘录自:http://haohaoxuexi.iteye.com/blog/2157769 本文使用Spring Security自带的方式连接数据库对用户进行认证. 1.Spring Se ... 
- idea配置项目运行时内存大小
			选择 edit Configurations : -server -XX:PermSize=1024M -XX:MaxPermSize=2048M 
- FilenameFilter总结
			一.FilenameFilter介绍 java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件: 一般地: (1)String[] fs = f.l ... 
