【问题标题】:Are JavaScript functions objects? [duplicate]JavaScript 函数是对象吗? [复制]
【发布时间】:2016-10-28 13:55:39
【问题描述】:

如果 JavaScript 函数是第一类对象,因此属于 object 类型,为什么会发生以下情况?

function hello(){}
typeof hello -> function

不应该给吗

typeof hello -> object

【问题讨论】:

  • @JJJ 我看到它并试图找到更好的副本但找不到。这个问题和这个问题很不一样。如果您找到更好的副本,我绝对赞成 dupehammering。

标签: javascript function object typeof


【解决方案1】:

是的,JavaScript 函数是对象。 JavaScript 中唯一的基本类型是原始值类型:数字、符号、布尔值、null、未定义以及字符串和对象。

所有不是原始值类型的都是对象。 typeof 因其他原因而损坏,例如 typeof null 是“对象”,但 null 实际上不是对象。

typeof hello 返回函数,因为它可能是真正确定某些东西可以作为函数调用的唯一方法。

【讨论】:

  • 很酷的欢呼声。那么 typeof 使用起来不安全吗?
  • w3schools.com/js/js_function_definition.asp如果你有兴趣,这篇文章或许能给你更多的信息。
  • @Theworm typeof 如果您了解其所有注意事项,则可以安全使用。
【解决方案2】:

在 Javascript 中,如果不是原语,它就是对象。 不幸的是,javascript 在使用 typeof 运算符时并不能很好地区分数组、函数和 null,但有一些方法用Object.prototype.call()来告诉

这是一个例子:

var a = function () {};
var b = null;
var c = [];
var d = {};
console.log("typeof function () {}: " + typeof a + " -- Object.prototype: " + Object.prototype.toString.call(a));
console.log("typeof null: " + typeof b + " -- Object.prototype: " + Object.prototype.toString.call(b));
console.log("typeof []: " + typeof c + " -- Object.prototype: " + Object.prototype.toString.call(c));
console.log("typeof {}: " + typeof d + " -- Object.prototype: " + Object.prototype.toString.call(d));

【讨论】:

  • 您现在可以使用Symbol.toStringTag 欺骗Object.prototype.toString.call 一段时间。仅供参考。
【解决方案3】:

虽然 Javascript 函数是对象,但数字、字符串等也是。typeof 函数让您知道对象何时是 Javascript 已经知道的特定数据结构,如果它是不知道的对象,则返回对象(但是仍然定义/不为空)。

这里有更多相关信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2011-09-25
    • 2019-11-20
    • 2011-10-24
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多