每个对象都是一个函数,每个函数都是一个对象 - 哪一个是正确的?

51

我在阅读这个链接 JavaScript_syntax

似乎循环了——每个函数都是一个对象,而每个对象本身也是一个函数。哪个是原子的?有人能用更好的方式解释一下吗?


35
当你完全理解它时,你将达到涅槃境界。 - FrustratedWithFormsDesigner
javascript:alert(Object) 告诉我们: function Object() { [native code] } 这表明 Object 是一个函数! - Ekim
至少在使用以下代码时:javascript:alert(window.navigator.userAgent) Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3 - Ekim
1
请查看此答案:https://dev59.com/1G025IYBdhLWcg3whGWx - Rohit
13个回答

1
JavaScript中的一切都是哈希表。Ryan Dahl在其中一次演讲中说过这句话。这也是JSON的定义:一个哈希表定义。这就是为什么您可以使用数组表示法或对象属性表示法来访问对象。哈希表的值也可以是函数,这是一个哈希表,或者更确切地说是关联数组。在控制台中键入Object类型,您将获得{[native code]},这是一个哈希表。

-1
Aaron Digulla所选的答案并不完全正确,因为它说:

任何不是原始类型(未定义、null、数字、字符串、布尔)的东西都是对象。

但是字符串是一个对象。这就是为什么你可以做像这样的事情:
myString="Hello World";

x = myString.length;
newString = myString.toUpperCase();
link = myString.link("http://www.hello-world.com/");

字符串对象可以使用许多其他方法。

您还可以像这样初始化字符串:

myString = new String("Hello, World!");

但是因为字符串也是一种数据类型,所以只需应用一个值就可以很容易地初始化它。

不一定是对问题的回答... 只是对 Aaron Digulla 的答案进行澄清/更正。


6
从技术上讲,这并不正确。在JavaScript中,字符串是原始数据类型。你能够使用方法来操作它们,这暗示了内部的情况。每当你操作一个字符串原始值时,JavaScript都会创建一个继承自String对象的对象来执行操作,然后返回一个字符串原始值。这个过程是即时进行的。在JS中,字符串原始值本身实际上是不可变的。 - AdamSchuld

-2

所选答案是错误的。在JavaScript中,除了原始类型之外,一切都是函数。对象本身就是一个名为function Object()的函数。例如,使用以下代码:

<script>
    alert(Object);
</script>

7
Object 是一个函数,但并不是每个对象都是一个函数。 - Andrew Magee
@AndrewMagee,你能详细解释一下吗?难道不是所有的JavaScript对象都是那个“Object”函数的后代吗? - doubleOrt
1
@doubleOrt,我可能会有点晚,但这是真的,因为Object是一个构造函数。它是自己的变量,也是一个函数。所有其他对象都是该构造函数的实例,并且与构造函数本身的类型无关。您可以通过打开控制台并输入({}).constructor === Object来检查此内容。 - Gust van de Wal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接