首页 >web前端 >js教程 >JavaScript 基元真的是对象吗?

JavaScript 基元真的是对象吗?

Barbara Streisand
Barbara Streisand原创
2024-11-15 00:08:02368浏览

Are JavaScript Primitives Truly Objects?

JavaScript 对象的有趣本质

在编程的深处,JavaScript 的世界呈现出意想不到的转折:并非一切都是对象。虽然许多介绍性文本暗示“几乎所有东西”都属于这种分类,但仔细检查会发现不同的事实。

对象的核心是通过方法和属性封装功能。例如,数组就适合这个模型及其固有的键值对。然而,当涉及到“字符串”、“数字”和“函数”时,界限就变得模糊了。

这些实体可能看起来类似于函数,对输入执行转换并产生输出,而无需明显访问属性或方法。在这种情况下,点表示法仍然明显缺失。

包装难题

揭开谜团,我们发现了一个微妙的区别:这些原语,正如它们所知,缺乏物体的真实本质。相反,它们被包裹在对象服装中,即字符串、数字和布尔值。这些包装器拥有方法和属性,赋予对象行为的错觉。

例如,考虑以下代码:

var s = "foo";
var sub = s.substring(1, 2); // sub becomes "o"

在幕后,JavaScript 执行一系列隐藏步骤:

  1. 为 s 创建一个字符串包装对象,有效地应用 new String(s)。
  2. 使用指定参数对包装对象执行 substring() 方法。
  3. 丢弃 String 包装对象。
  4. 返回结果字符串(原始字符串) ) 从步骤 2 开始。

幻觉属性

虽然基元似乎可以分配属性,但这种尝试被证明是徒劳的,如以下示例所示:

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined

发生这种情况是因为该属性是在短暂的 String 包装对象,该对象会立即被丢弃,导致属性无法访问。

功能:伪装的对象

与基元不同,函数是继承自 Object 的成熟对象。这意味着它们拥有对象的所有功能,包括拥有自己的属性的能力。看看这个例子:

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea

结论

在 JavaScript 中,并不是所有东西都披着对象的外衣。由对象包装器伪装的原语创建了对象行为的错觉。只有通过更深入地理解 JavaScript 的复杂性,其对象的真实本质才会变得显而易见。

以上是JavaScript 基元真的是对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn