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)