JavaScript - typeof Object vs Object()

JavaScript - typeof Object vs Object()

本文关键字:Object vs JavaScript typeof      更新时间:2024-02-18
console.log(typeof Object)    => function
console.log(typeof Object())  => object

这背后的解释是什么?

P.S - 我是JavaScript的新手。

我认为你很难掌握一流函数的概念。这种情况经常发生在Java程序员身上,他们开始使用JavaScript编程,并期望它与Java相似,因为命名法。所以让我说清楚:

JavaScript 与 Java 完全不同。

如果你已经暴露在太多的Java教条辐射中,一等函数是一个很难理解的概念。

JavaScript 中一等函数的基本思想是:

函数是对象。

这是一件非常好的事情,因为这意味着我们可以将函数作为参数传递给其他函数,并从其他函数返回函数。这使我们能够做很多很酷的事情。例如:

function compose(f, g) {
    return function (x) {
        return f(g(x));
    };
}

在这里,compose函数将另外两个函数作为参数,并返回另一个在数学上等效于 f . g 的函数。例如:

function thrice(x) {
    return 3 * x;
}
function plusOne(x) {
    return x + 1;
}
var thricePlusOne = compose(plusOne, thrice);

这相当于写入:

function thricePlusOne(x) {
    return plusOne(thrice(x));
}

一旦你掌握了它的窍门,函数式编程就会自然而然地出现在你身上。这很简单。

无论如何,让我们谈谈构造函数。构造函数是返回对象的函数。例如,Object是一个构造函数。因此:

console.log(typeof Object); => function

我希望您将typeof运算符视为一个函数。如果有帮助,您可以按如下方式编写:

console.log(typeof(Object)); => function

看看我们在这里做什么?我们正在向typeof运算符传递一个构造函数。因此console.log显示function .

另一方面,在下面的代码中console.log显示object

console.log(typeof Object()); => object
console.log(typeof(Object())); => object

发生这种情况的原因是,您正在调用Object并将 Object 的返回值传递给 console.log 。在这种情况下,Object的返回值是一个空对象(即 {}(。

但请注意,JavaScript 中的大多数构造函数仅在函数调用前面加上 new 关键字时才返回对象。这使得JavaScript代码看起来更像Java。但是,所有本机构造函数(例如 ObjectArrayFunctionNumberStringBoolean等(允许您省略new关键字。因此,以下两个语句是等效的:

console.log(typeof Object()); => object
console.log(typeof new Object); => object

对于用户定义的构造函数,通常不是这样。您可以创建允许您省略new的构造函数,但这超出了本答案的范围。

Object是一个

函数,因为您可以使用Object()但是,您现在在使用 typeof(Object()) 时要做的是首先调用函数Object(),获取其返回值并获取该返回值的类型,在本例中是一个对象。

但是,当您只是调用typeof(Object)时,您不会执行函数 Object((,而只是检查变量 Object 的类型。而且因为这个变量是一个函数,你可以用Object()它告诉你typeof(Object)是一个函数

对象只是一个函数的名称,按原样调用它是指 Fuzion 的代码(简而言之,对象只是容器的名称(,这意味着该函数被执行。相反,编写"对象(("实际上是在执行函数,那么"if"考虑的数量不是函数本身,而是函数返回的值。

例:

 var a = function () {
      return "say hello";
 }
 b = a // -> b is a perfect copy of a (function)*
 c = a() // -> c is the returned string "say hello", if u write d = b () d has same value of c because write a() or b() fire the same function

* 相同,如果您写:

var b = function(){
   return "say hello";
}

每当你用 (( javascript 解决它调用函数时,写函数的名称而不写 (( JavaScript 会考虑函数本身。

示例,写入:

typeof Object() //--> object

写的也一样:

typeof {} //--> object

因为 javascript 解决 Object(( 函数并考虑返回值的类型。

我的英语很烂...不好意思。