如何更精确的确定javascript的对象类型?

Posted 小小码农,可笑可笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更精确的确定javascript的对象类型?相关的知识,希望对你有一定的参考价值。

确定类型的三种方式:

typeof

用来确定原始类型,更准确的说用来确定变量是字符串,数值,布尔值和undefined。ES6后多了个Symbol。因为如果对象是null,typeof返回的是object

let a = 3;
let b = '3';
let c = true;
let d = undefined;
let e = {} ;
let f = ['1'] ;
let g = new Object();
let h = Symbol('bar');
let i = null;
console.log(typeof a);//number
console.log(typeof b);//string
console.log(typeof c);//boolean
console.log(typeof d);//undifined
console.log(typeof ddd);//未定义也是 undefined
console.log(typeof e);//object
console.log(typeof f);//object
console.log(typeof g);//object
console.log(typeof h);//symbol
console.log(typeof i);//object

instanceof

instanceof是个运算符。用来检测constructor.prototype(constructor是构造函数)是否在参数object的原型链上。

所以instanceof是不能判定原始类型的。原始类型就是个值,不存在prototype属性。

接下来还是代码说话

let g = new Object();
console.log('g:',g instanceof Object);//g:true
//这里实际是什么操作呢?
//实际是Object.getPrototypeOf(g) === Object.prototype
console.log(Object.getPrototypeOf(g) === Object.prototype);

//由于是构造函数,也可以这样
function test(){};
let o = new test();
console.log(o instanceof test);//true
console.log(Object.getPrototypeOf(o) === test.prototype);//true

Object.prototype.toString.apply(obj)

这个其实记得就好啦,我们可以看看Object的属性打印Object.prototype

最后上个方法就结束吧,有关Object的内置对象,js的原型链,apply的具体使用和含义我们不在这里叙述,会另开篇章

export function getType (argu) {
  let type = Object.prototype.toString.apply(argu)
  return type
}

 

以上是关于如何更精确的确定javascript的对象类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定两个 JavaScript 对象的相等性?

使用 JavaScript 在 JSON 中搜索精确匹配

js中通过Object.prototype.toString方法----精确判断对象的类型

js-20170606-数据类型

JavaScript 的内置对象和浏览器对象

JavaScript--时间类型处理