嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-06-06 4339 次浏览 标签 : javascript

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

/**
 * 一组判断对象类型的函数
 */
function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

function isFunction(item) {
    return is("Function", item);
}

function isArray(item) {
    return is("Array", item);
}

在控制台做测试

var a = {}
undefined
a.toString();
"[object Object]"
a.toString() === Object.prototype.toString.call(a)
true

那为什么不直接用 a.toString() 而要用 Object.prototype.toString.call(a)

如果是数组或者函数,结果就不是这样了。

var c = [1,2,3,4];
undefined
c.toString();
"1,2,3,4"
Object.prototype.toString.call(c);
"[object Array]"
var d = function(){console.log(this)};
undefined
d.toString();
"function (){console.log(this)}"
Object.prototype.toString.call(d);
"[object Function]"


更加严格的分析:

有大神指点就是好,朋友给的链接地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

我顺便翻译了下,也不知道质量如何,反正大家都有修改权限,不认可的朋友就改呗:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

根据上面链接里介绍的,如果直接使用 obj.toString() 有可能这个方法被重写了,而不是默认的,使用 Object.prototype.toString.call(a) 得到的结果更加可靠!

只能说我的js尚未入门,悲哀。

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表