4
var obj = {};
var fn = function(){};
obj.prop = "some value";
fn.prop = "some value";
assert( obj.prop == fn.prop, "Both are objects, both have the property." );
assert(typeof(obj) === 'object', "Yes its an object");
assert(typeof(fn) === 'object', "why is this not an object");

我从周围的一些人那里听说,functions are objects这是我目前所相信的,但为什么第一个条件passes很好,而第三个条件很好fails

4

2 回答 2

8

函数对象,但它们是特定类型的对象。 typeof(fn)应该评估为“函数”,它是“对象”的子类型。

于 2012-12-27T00:09:35.933 回答
8

那是因为函数的直接类型是"function".

但是,您错过了这个断言:

fn instanceof Object // true

顺便说一句,诸如"number"和之类的类型"string"严格来说不是的后代Object,即使它们在具有方法的意义上就像对象一样;只是让 JavaScript 变得有趣的事情之一 :)

另请参阅:typeof及其值范围。

于 2012-12-27T00:10:15.543 回答