什么是函数的数据类型:函数还是对象?在JavaScript中

Jun*_*tae 15 javascript types

MDN说:

六种原始数据类型:

  • 布尔
  • 空值
  • 未定义
  • 符号(ECMAScript 6中的新内容)

  • 和对象

但我困惑,功能数据类型和对象数据类型.

让我们来看看 :

var func = function() { 
    console.log ('Hello World ! ')
};

var obj = { 
    property : something
}  


console.log(typeof(func)); // ===> function
console.log(typeof(obj)); // ===> object 
Run Code Online (Sandbox Code Playgroud)

是不同的功能数据类型和对象数据类型?为什么typeof(func)功能?不是一个对象?该文件称有7种数据类型(6种原始,1种对象).功能不包括在任何地方.

到现在为止,超过1年,我认为函数的数据类型是对象,我听说函数是JavaScript中的第一类对象,所以我对函数是对象没有疑问但是今天我想更多时间,并且想知道.

有什么不同吗?

jfr*_*d00 10

您可以在逻辑上将其Function视为子类Object.它具有的所有方法Object所特有的功能加上一些更多的(如.bind(),.call(),.apply(),等...).

为什么Javascript决定Function报告它自己的独特类型,但不是Array(这是类似的推导Object)是任何人的猜测,可能只有该语言的原始设计者知道.Function报告自己的类型非常有用,因此您可以轻松检查属性是否可以作为函数调用,也许这就是为什么这样做的主要原因.

这是一个Function对象如何具有以下方法的演示Object:

function f() {}
f.someProperty = "foo";

log(f.hasOwnProperty("someProperty"));
log(f instanceof Object);
log(f instanceof Function);

function log(x) {
    var div = document.createElement("div");
    div.innerHTML = x;
    document.body.appendChild(div);
}
Run Code Online (Sandbox Code Playgroud)