console.log(typeof Object) => function
console.log(typeof Object()) => object
这背后的解释是什么?
P.S - 我是JavaScript的新手。
答案 0 :(得分:1)
我认为你在掌握一流功能的概念时遇到了麻烦。对于那些开始使用JavaScript进行编程并期望它与Java类似的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。但是,所有本机构造函数(例如Object
,Array
,Function
,Number
,String
,Boolean
等)都允许您省略new
关键字。因此,以下两个陈述是等价的:
console.log(typeof Object()); => object
console.log(typeof new Object); => object
对于用户定义的构造函数,通常不会这样。您可以创建允许省略new
的构造函数,但这超出了本答案的范围。
答案 1 :(得分:0)
对象只是函数的名称并调用它,因为它是指Fuzion的代码(简而言之,对象只是容器的名称),这意味着函数被执行。 写“object()”而不是实际执行该函数,那么“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()函数并考虑了返回值的类型。
我的英语很糟糕......对不起。
答案 2 :(得分:0)
Object
是一个功能,因为您可以使用Object()
来调用它
但是,在使用typeof(Object())
时,您现在所做的是首先调用函数Object()
,获取其返回值并获取该返回值的类型,在这种情况下这是一个对象。
但是当你只调用typeof(Object)
时,你不执行函数Object(),而只是检查变量Object的类型。因为这个变量是一个可以用Object()
调用的函数,它告诉你typeof(Object)
是一个函数