JavaScript - typeof Object vs Object()
JavaScript - typeof Object vs Object()
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。但是,所有本机构造函数(例如 Object
、Array
、Function
、Number
、String
、Boolean
等(允许您省略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(( 函数并考虑返回值的类型。
我的英语很烂...不好意思。
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- JavaScript - typeof Object vs Object()
- javascript foo.call(object) vs. object.foo()
- Symbol.toPrimitive vs Object.prototype.valueOf
- document.object Vs. document.getElementById()
- Backbone.Wreqr vs Javascript Object
- JavaScript:Object vs True(或其他原语)相等比较(性能/优化)
- autoload function vs json object is javascript
- Javascript static/singelton - this vs _this vs object name
- var b = Object.create(a) vs. var b = a
- Javascript文本对象符号This vs Object Name
- 模块.在nodejs中导出- fn vs object
- Object.freeze() vs const
- Using `this` vs Object.create(prototype)
- for-in vs Object.没有继承属性的keys forEach
- Javascript vs. object?丁目检查员
- jQuery object vs htmlString
- Javascript console.log(object) vs. concatenating string
- class (Object) vs id
- 数组中.splice (+ loops) vs Delete Object[..]vs Object[…]=未定义