JS 优化获取对象类型的方式

Jan 30 2019 Node.js

我们都知道可以通过 Object.prototype.toString.call(obj) 的方式来获取类型真实的类型。

不过我发现一个更简单而且更快的写法。利用大括号 {} 代替 Object.prototype, 在 #135 中我简单说明了, {} 等价于 Object.create(Object.prototype),所以这里就可以简写,没想到还变快了!

1
2
3
4
5
6
7
8
9
10
11
12
console.time("1");
Object.prototype.toString
.call(new Date())
.match(/\s(\w)/)[1]
.toLowerCase();
console.timeEnd("1");
console.time("2");
({}.toString
.call(new Date())
.match(/\s(\w)/)[1]
.toLowerCase());
console.timeEnd("2");

测试结果(node v8.9.1)

image

可以看到这种写法不仅简单,而且更快了。

写一个通用的 util 函数就是:

1
2
3
function getType (obj) {
return {}.toString.call(obj).match(/\s(\w+)/)[1].toLowerCase()
}