首页 > 试题广场 >

完全等同

[编程题]完全等同
  • 热度指数:50608 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
判断 val1 和 val2 是否完全等同
推荐
编辑于 2015-12-09 09:48:13 回复(5)
function identity(val1, val2) {
    if (val1===val2) {
        if (1/val1 == -1/val2){ // 针对+0、-0
            return false;
        } else {
            return true;
        }
    } else if ((typeof val1 === 'number') && (typeof val2 === 'number') && (isNaN(val1)) && (isNaN(val2))) {
        return true; // 针对NaN
    } else {
        return false;
    }
}


发表于 2019-11-04 17:21:52 回复(1)
function identity(val1, val2) {
if ((val1 !== val1)&&(val2 !== val2)) {
return true; //考虑 NaN情况
}
if (val1 === val2) {
return true;
}
return false;
}

编辑于 2016-12-02 22:38:41 回复(0)
function identity(val1, val2) {
    return Object.is(val1,val2)

}


发表于 2020-02-17 19:47:37 回复(0)
es6重写系列
function identity(val1, val2) {
return Object.is(val1, val2);
}
编辑于 2017-05-04 20:38:46 回复(3)
function identity(val1, val2) {
    return (val1 === val2);
}
发表于 2020-03-24 17:16:44 回复(0)
function identity(val1, val2) {
    if(val1 === val2) {
        return true;
    }else {
        return false;
    }
}

发表于 2018-06-30 13:29:48 回复(0)
function identity(val1, val2) {

       return val1===val2;

}
发表于 2015-08-28 17:08:37 回复(0)
一般使用双等来判断(==),如果还需要类型相同那么就用三等(===)。
说一下这两个的区别:
== equality 等同,=== identity 恒等。
==, 两边值类型不同的时候,要先进行类型转换,再比较。 
==,不做类型转换,类型不同的一定不等。 
下面分别说明: 
先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 
1、如果类型不同,就[不相等] 
2、如果两个都是数值,并且是同一个值,那么[相等]。
3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 
4、如果两个值都是true,或者都是false,那么[相等]。 
5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 
6、如果两个值都是null,或者都是undefined,那么[相等]。 
再说 ==,根据以下规则: 
1、如果两个值类型相同,进行 === 比较。 
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 
a、如果一个是null、一个是undefined,那么[相等]。 
b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 
c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 
d、任何其他组合,都[不相等]。
发表于 2016-05-01 19:16:40 回复(4)
function identity(val1, val2) {
    if(val1===val2){
        // +0不等于-0;但是用===的话会返回true;所以要做额外的判断
        return val1 !== 0 || val2 !== 0 || 1/val1 === 1/val2;
    }else {
        //NaN等于NaN 但是上面的判断 NaN === NaN 会返回false;所以做额外的判断
        return val1 !== val1 && val2!== val2;
    }
}

编辑于 2019-03-29 11:18:31 回复(8)
function identity(val1, val2) {
    return val1===val2?true:false;
}
其实我觉得这题的意思应该是考===完全相等,除此之外应注意到的是NaN  和+0与-0,这个在===中的判断是错误的,建议使用es6新增的能力Object.is(),与===不同之处只有两个:一是 +0 不等于 -0 ,二是 NaN 等于自身。
发表于 2017-08-27 11:56:39 回复(5)
NaN与任何值都不相等,包括NaN本身。
发表于 2019-03-04 09:21:24 回复(0)
恕我直言,这种一句话的题最tm难了
发表于 2021-10-14 15:16:19 回复(1)
function identity(val1, val2) {
    return val1===val2;
}
发表于 2017-11-21 16:02:05 回复(0)
function identity(val1, val2) {
	if(val1===val2){
        return true;
    }
    return false;
}

测试通过!

发表于 2017-04-10 14:39:44 回复(0)
这题应该判断下对象或数组

//判断参数是否为对象或数组
function isObjectOrArr(obj) {
    return typeof obj === 'object' && obj !== null
}

function identity(val1, val2) {
    if(!isObjectOrArr(val1) || !isObjectOrArr(val2)){//如果不是对象或数组,直接比较
        return val1 === val2;
    }
    if(val1 === val2) return true;//为同一个对象
    
   //取出对象或数组的key,放进一个数组
    const obj1Keys = Object.keys(val1);
    const obj2Keys = Object.keys(val2);
     //判断两对象长度是否相等
    if(obj1Keys.length !== obj2Keys.length) return false;//长度不相等
    
    //以第一个对象为参照,一一比较第二个对象是否与第一个对象的值相等
    for(let key in val1){
        if(val1.hasOwnProperty(key) && val2.hasOwnProperty(key)){ //不在原型上
            const res = identity(val1[key],val2[key]); //递归查找
            if (!res)return false; //找不到第二个与第一个相等的直接返回false
        }
    }
    return true; //全相等
}
发表于 2021-06-25 19:08:44 回复(0)
function identity(val1, val2) {
return (val1 === val2);
}

发表于 2016-05-26 16:02:06 回复(0)
判断val1与val2是否相等
if(val1===val2){
    return true
}else{
    return false
}

发表于 2022-06-01 16:07:23 回复(0)
625头像 625
这样不就完了吗
发表于 2018-06-02 15:32:11 回复(3)
 function identity(val1, val2) {
            return val1 === val2
        }
发表于 2023-08-29 15:53:06 回复(0)
??????===就能过????
发表于 2023-06-04 17:37:06 回复(0)