我是javascript的noob,我很困惑以下方法的区别。
function foo(){};
var bar = new Object();
Object.prototype.toString.call(foo).slice(8, -1); // output "Function"
typeof foo; // output "function"
Object.prototype.toString.call(bar).slice(8, -1); // output "Object"
typeof bar; // output "object"
答案 0 :(得分:2)
您无法覆盖从typeof
var MyObject = function() { };
MyObject.prototype.toString = function() { return undefined; }
var x = new MyObject();
console.log(typeof x);
console.log(x.toString());

如果您对JavaScript的方法感兴趣,请查看MDN:
答案 1 :(得分:1)
toString
'hack'最常见的应用是弄清楚你正在处理的对象类型:
typeof(new Array()) === "object";
typeof(new Date()) === "object";
typeof(new RegExp()) === "object";
Object.prototype.toString.call(new Array()).slice(8, -1) === "Array";
Object.prototype.toString.call(new Date()).slice(8, -1) === "Date";
Object.prototype.toString.call(new RegExp()).slice(8, -1) === "RegExp";
例如,jQuery 1.11将其用于check whether a given object is an array。现代浏览器支持jQuery 2及更高版本uses the native Array.isArray
。
此外,在很多情况下,两者会返回不同的结果,最常见的是在原始类型周围使用对象包装器时:
typeof(new Number(5)) === "object";
Object.prototype.toString.call(new Number(5)).slice(8, -1) === "Number";
typeof(new String("hi")) === "object";
Object.prototype.toString.call(new String("hi")).slice(8, -1) === "String";
答案 2 :(得分:0)
toString()是一种方法,它返回表示当前对象的字符串(例如:Function)。你可以覆盖它以返回你想要的任何东西。
typeof 是一名运营商。您可以使用它来获取对象类型(作为字符串)。你不能像其他语言一样改变(重载)它。