【问题标题】:Are functions objects or types in Javascript?Javascript 中的函数是对象还是类型?
【发布时间】:2023-04-01 02:43:01
【问题描述】:

在他的 Eloquent Javascript 中,Haverbeke 声称(第 16 页):

“在 JavaScript 系统中,大部分数据都被整齐地划分为称为值的东西。每个值都有一个类型,这决定了它可以扮演的角色。有六种基本类型的值:数字,字符串、布尔值、对象、函数和未定义的值。”

Javascript: The Good Parts 中的 Crockford 说:

“JavaScript 的简单类型是数字、字符串、布尔值(true 和 false)、null 和 undefined。所有其他值都是对象。数字、字符串和布尔值类似于对象,因为它们具有方法,但它们是不可变的。JavaScript 中的对象是可变键集合。在 JavaScript 中,数组是对象,函数是对象,正则表达式是对象,当然,对象也是对象。”

现在,至少在 V8 下我明白了:

> typeof function(){};
'function'
> typeof {};
'object'

我不明白对象是类型而函数是对象还是函数和对象都是类型。我想我错过了原始类型和其他类型(复合类型?)之间的区别。

【问题讨论】:

  • JS 中的一切都是对象。这就像说正方形是长方形,但长方形不是正方形。
  • @Derek:并非全部。 JS 有原语(非对象),其中一些有一个对象“包装器”,但不是全部。
  • 最容易将函数视为一种特殊类型的对象,就像数组是一种特殊类型的对象一样。它们具有对象的功能,但也具有使它们成为不同类型对象的其他功能。

标签: javascript


【解决方案1】:

在谈论 javascript 中的类型时需要小心。值有一个Type,它可能是以下之一:

  1. 未定义
  2. 布尔值
  3. 字符串
  4. 号码
  5. 对象

恰恰相反,typeof operator 返回的值不是类型,它是一个字符串,对于大多数值而言与类型相同,但对于:

  1. Null 返回“对象”,即使它的类型为 Null
  2. 实现[[Call]] 的对象返回函数,即使它的类型是对象
  3. 主机对象可以返回任何他们喜欢的值,而不是受限值之一

所以底线是函数的类型是对象,但typeof someFn 返回function

【讨论】:

    【解决方案2】:

    它们是一种对象。

    typeof"function"

    typeof (function() {}) === "function" // true
    

    内部[[Class]][object Function]

    ({}).toString.call(function() {}) === "[object Function]" // true
    

    它们是 Function 构造函数原型的实例:

    (function(){}) instanceof Function // true
    

    它们是 Object 构造函数原型的实例:

    (function(){}) instanceof Object // true
    

    【讨论】:

      【解决方案3】:

      JavaScript 支持函数式编程。因此,所有 JavaScript 函数都是一等函数,这意味着函数被视为普通对象。

      http://en.wikipedia.org/wiki/First-class_functions

      【讨论】:

      • 如果它们完全像普通对象一样被对待(例如,{})那为什么是typeof {} !== typeof function() {}
      • @icktoofay——因为 ECMA-262 定义了 typeof operator 返回的内容,并且对于某些对象,它不返回类型(例如 Null 是 Null 类型,但 typeof Null 返回“对象”) .
      • (我实际上是想让他们将其添加到答案中——这并不是我真正想知道的事情。)
      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2020-05-31
      • 2013-07-14
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多