JS的相等和类型判断 | 青训营笔记

64 阅读2分钟
一、==和===的区别
===:

三个等号称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边 的值,值相同则返回 true,若等号两边的值类型不同时直接返回 false。也就是说三个等号 既要判断值也要判断类型是否相等。

==:

两个等号称为等值符,当等号两边的值为相同类型时比较值是否相同,类型不同时会发生类型的自动转换,转换为相同的类型后再作比较。也就是说两个等号只要值相等就可以。

二、怎么判断两个对象是否相等

想要比较两个对象内容是否一致,思路是要遍历对象的所有键名和键值是否都一致: 1、判断两个对象是否指向同一内存 2、使用 Object.getOwnPropertyNames 获取对象所有键名数组 3、判断两个对象的键名数组是否相等 4、遍历键名,判断键值是否都相等。

三.如何判断JS中的数据类型
1.typeof

typeof 可以用来区分除了 null 类型以外的原始数据类型,对象类型的可以从普通对象里面识别出函数。

2.instanceof

优点: 能够区分Array、Object和Function,适合用于判断自定义的类实例对象。instanceof运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。

缺点: Number,Boolean,String基本数据类型不能判断,同时Function、Array和Object还是不能判断其具体的数据类型。

3.constructor

constructor有两个作用,一是判断数据的类型(Number、String、Boolean、Array、Function、Object),二是对象实例通过 constrcutor 对象访问它的构造函数。

四、区别数组和对象的方法
方法一:通过 ES6 中的 Array.isArray 来识别
Array.isArray([]) //true
Array.isArray({}) //false
方法二:通过 instanceof 来识别
[] instanceof Array //true
{} instanceof Array //false
方法三:通过调用 constructor 来识别
{}.constructor //返回 object
[].constructor //返回 Array
方法四:通过 Object.prototype.toString.call 方法来识别
Object.prototype.toString.call([]) //["object Array"]
Object.prototype.toString.call({}) //["object Object"]