比较javascript中的原始数据类型和对象数据类型[重复]

Posted

技术标签:

【中文标题】比较javascript中的原始数据类型和对象数据类型[重复]【英文标题】:compare primitive datatype and object datatype in javascript [duplicate] 【发布时间】:2020-05-07 17:18:44 【问题描述】:

我想用equals方法比较两个对象:

class test

    constructor(name, year) 
        this.name= name;
        this.year= year;

        if (year== 0) 
            this.year= -1;
        
    

    equals(a)
        if(this.year!= a.year)
            return false;
         
        if(this.name!= a.name)
            return false
        
        return true;
    

如果我调用类测试的新对象:

let a1 = new test("Hey",22);
let a2 = new test("Hey",22);

它适用于:

console.log(a1.equals(a2)); --> gives me true

但如果我在测试对象中生成一个新字符串:

let a1 = new test(new String("Hey"),22);
let a2 = new test(new String("Hey"),22);

equals 方法的输出给了我错误:

console.log(a1.equals(a2)); --> gives me false;

如何修复 equals 方法,以便它也比较 String 类型的新对象?

【问题讨论】:

【参考方案1】:

请看下面的例子:

var s = 'foo';
var s_obj = new String(s);
var s_obj2 = new String(s);

console.log(typeof s); 
console.log(typeof s_obj);  

console.log(s)
console.log(s_obj)
console.log(s_obj.valueOf())

// funny effects:
console.log(s_obj==s) // true 
console.log(s==s_obj) // true
console.log(s_obj==s_obj2) // false
console.log(s_obj.valueOf()==s) // true
console.log(s_obj.valueOf()==s_obj2.valueOf()) // true

如果你比较两个新的 String 对象,你不是在比较它们内部的值,而是对象实例

【讨论】:

如果 typeof 名称是对象(a.name 和 this.name 都是),那么您必须使用 .valueOf。我编辑我的例子给你一些有趣的 console.log

以上是关于比较javascript中的原始数据类型和对象数据类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 新增两个原始数据类型

JavaScript中的“符号”原始数据类型是啥[重复]

JavaScript基础

01.JavaScript 面向对象精要--原始类型和引用类型

JavaScript数据类型

Javascript 中 == 和 === 的区别