JavaScript-对象的类型vs对象()

JavaScript-对象的类型vs对象(),javascript,object,Javascript,Object,这背后的解释是什么 p.S-我是JavaScript新手。对象只是一个函数的名称,按您所指的Fuzion代码调用它(简单地说,对象只是容器的名称),这意味着函数已执行。 在实际执行函数时,写“object()”,那么“if”考虑的量不是函数本身,而是函数返回的值 例如: console.log(typeof Object) => function console.log(typeof Object()) => object *如果您写下以下内容,则相同: var a =

这背后的解释是什么


p.S-我是JavaScript新手。

对象只是一个函数的名称,按您所指的Fuzion代码调用它(简单地说,对象只是容器的名称),这意味着函数已执行。 在实际执行函数时,写“object()”,那么“if”考虑的量不是函数本身,而是函数返回的值

例如:

console.log(typeof Object)    => function
console.log(typeof Object())  => object
*如果您写下以下内容,则相同:

 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

每当调用一个函数时,()JavaScript解决它,写函数的名称没有()JavaScript将考虑函数本身。

例如,写:

var b = function(){
   return "say hello";
}
也可以这样写:

typeof Object() //--> object

因为JavaScript解决Objutt()函数,并考虑返回值的类型。


我的英语糟透了。。。抱歉。

我认为您在掌握一流函数的概念方面遇到了困难。这种情况经常发生在Java程序员身上,他们开始使用JavaScript编程,并期望它与Java相似,因为命名法。因此,让我澄清一下:

JavaScript与Java完全不同。

如果您接触过太多Java教条辐射,那么第一类函数是一个很难理解的概念

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

函数是对象。

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

typeof {} //--> object
function compose(f, g) {
    return function (x) {
        return f(g(x));
    };
}
这里,
compose
函数将另外两个函数作为参数,并返回另一个在数学上等价于
f的函数。g
。例如:

typeof {} //--> object
function compose(f, g) {
    return function (x) {
        return f(g(x));
    };
}
这相当于写:

function thrice(x) {
    return 3 * x;
}

function plusOne(x) {
    return x + 1;
}

var thricePlusOne = compose(plusOne, thrice);
一旦你掌握了窍门,函数式编程就会自然而然地出现。这很简单

不管怎样,让我们来谈谈构造函数。构造函数是返回对象的函数。例如,
对象
是一个构造函数。因此:

function thricePlusOne(x) {
    return plusOne(thrice(x));
}
我想让你把
typeof
操作符看作一个函数。如果有帮助,你可以写如下:

console.log(typeof Object); => function
看到我们在这里做什么了吗?我们正在将
typeof
运算符传递给构造函数。因此,
console.log
显示
功能

另一方面,在以下代码
控制台中。log
显示
对象

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

但是请注意,JavaScript中的大多数构造函数仅在使用
new
关键字作为函数调用的前缀时返回对象。这使JavaScript代码看起来更像Java。但是,所有本机构造函数(例如
对象
数组
函数
数字
字符串
布尔
,等等)都允许您省略
新的
关键字。因此,以下两种说法是等效的:

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

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

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


但是,当您只调用
typeof(Object)
时,您不会执行函数Object(),而只是检查变量对象的类型。因为这个变量是一个函数,你可以用
Object()
调用它,它告诉你
typeof(Object)
是一个函数,
Object
是一个函数,调用它(即
Object()
)返回一个对象。不明白有什么好解释的吗?请详细说明您的问题。因为它是在规范中定义的:。MDN文档可能更容易理解:。如果您对获得
对象
的实例感到困惑,即使您没有使用
新对象
,这只是提出规范的人添加到基本类型中的一些行为(可能是为了方便)。如果只调用构造函数,则不应期望所有构造函数都返回自身的实例;你可以这样称呼它:
Object()
;这个函数的返回值是一个对象。因此,在函数上调用
typeof
可以得到一种类型的“函数”,而在其返回值上调用
typeof
可以得到一种类型的“对象”。谢谢大家,现在非常有意义。