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
可以得到一种类型的“对象”。谢谢大家,现在非常有意义。