标签:数据 nan s系列 比较 基于 对象 检测 === star
1. 对于原始类型来说,除了 null 都可以调用typeof显示正确的类型
typeof 1 // ‘number‘
typeof ‘1‘ // ‘string‘
typeof undefined // ‘undefined‘
typeof true // ‘boolean‘
typeof Symbol() // ‘symbol‘
typeof null // ‘object‘
2. 但对于引用数据类型,除了函数之外,都会显示"object"。
typeof [] // ‘object‘
typeof {} // ‘object‘
typeof console.log // ‘function‘
3. 因此采用typeof判断对象数据类型是不合适的,采用instanceof会更好,instanceof的原理是基于原型链的查询,只要处于原型链中,判断永远为true
4. 如果是null 则返回object
5. https://blog.csdn.net/qq_38722097/article/details/80717240
1. typeof 一般被用于判断一个变量的类型
2. 我们可以利用 typeof 来判断number, string, object, boolean, function, undefined, symbol 这七种类型
3. 在判断不是 object 类型的数据的时候,typeof能比较清楚的告诉我们具体是哪一类的类型
4. typeof 在判断一个 object的数据的时候只能告诉我们这个数据是 object, 而不能细致的具体到是哪一种 object
typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。
核心: 原型链的向上查找。(右侧构造函数指向的原型对象是否存在于左侧实例对象的原型链上)
function myInstanceof(left, right) {
//基本数据类型直接返回false
if(typeof left !== ‘object‘ || left === null) return false;
//getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象
let proto = Object.getPrototypeOf(left);
while(true) {
//查找到尽头,还没找到
if(proto == null) return false;
//找到相同的原型对象
if(proto == right.prototype) return true;
proto = Object.getPrototypeof(proto);
}
}
Object在严格等于的基础上修复了一些特殊情况下的失误,具体来说就是+0和-0,NaN和NaN。
Object.is() 方法判断两个值是否是相同的值。表示两个参数是否相同的布尔值 。
1. ===叫做严格相等,是指:左右两边不仅值要相等,类型也要相等,例如‘1‘===1的结果是false,因为一边是string,另一边是number。
2. ==不像===那样严格,对于一般情况,只要值相等,就返回true,但==还涉及一些类型转换,它的转换规则如下:
1. 两边的类型是否相同,相同的话就比较值的大小,例如1==2,返回false
2. 判断的是否是null和undefined,是的话就返回true
3. 判断的类型是否是String和Number,是的话,把String类型转换成Number,再进行比较
4. 判断其中一方是否是Boolean,是的话就把Boolean转换成Number,再进行比较
5. 如果其中一方为Object,且另一方为String、Number或者Symbol,会将Object转换成字符串,再进行比较
var obj=new Object({a:3})
// console.dir(obj);
// console.dir([‘obj‘].toString());
// console.dir(obj.toString===Object.prototype.toString);
console.dir(obj.toString===Object.prototype.toString);
console.log(obj.toString());
// console.log(Object.prototype.toString.call(1));
标签:数据 nan s系列 比较 基于 对象 检测 === star
原文地址:https://www.cnblogs.com/ycyc123/p/14823933.html