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
。
答案 0 :(得分:7)
函数是对象,但它们是对象的特定类型。 typeof(fn)
应评估为“function”,这是“对象”的子类型。
答案 1 :(得分:7)
那是因为函数的 direct 类型是"function"
。
然而,你错过了这个断言:
fn instanceof Object // true
顺便说一下,"number"
和"string"
等类型严格来说是{em>不是 Object
的后代,即使它们就像对象一样从某种意义上说,他们有方法;只是其中一个让JavaScript变得有趣的事情:)
另请参阅:typeof
及其值范围。