return toString.call(obj)和return obj.toString()有什么区别?
我通常会找到这些不同风格的代码
发布于 2015-04-22 11:00:21
toString.call(obj)返回对象的类型,而obj.toString()返回对象的字符串表示形式,如果没有实现该函数,则返回对象的类型。
示例:
var a = [5];
a.toString() // "5"
toString.call(a) // "[object Array]"更多细节可以在MDN:Objects/Object/toString上找到。
使用toString()检测对象类:
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
// Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]UnderscoreJS使用toString.call(obj)而不是typeOf,因为它更快:
_.isNumber = function(obj) {
return toString.call(obj) == '[object Number]';
};发布于 2015-04-22 11:03:42
当您调用toString.call(obj)时,实际要做的是调用window.toString(call),即调用应用于您的对象obj的全局对象的toString-函数。
当您调用obj.toString()时,您可以调用实际对象的toString函数,该函数可能是本地实现的--例如,为了序列化或表示目的--或者在原型链上的某个位置。
试试这个:
toString === window.toString; // true
编辑:
在node.js中,全局对象实际上称为global,在浏览器中它将保持为window。
https://stackoverflow.com/questions/29795330
复制相似问题