解码 JavaScript 对象之谜
在 JavaScript 领域,无处不在的对象经常引发问题。虽然数组和函数表现出类似对象的行为,但揭开“字符串”和“数字”的神秘本质可能会令人困惑。
原始值的难以捉摸的本质
与流行的看法相反,JavaScript 中并非所有内容都是对象。字符串、数字和布尔值等核心元素被归类为基元,其特点是不可变的性质。与真正的对象不同,基元缺乏方法和属性。
对象性的幻觉
JavaScript 采用了一种巧妙的技巧来使基元看起来像对象。当尝试访问原语的属性(例如,s.substring(1, 2))时,JavaScript 会无缝创建一个拥有所需方法的包装对象(例如,String(s))。然而,这个包装器是短暂的,一旦方法执行完成就会消失。
证明:无法访问的属性
当将属性分配给基元时,这种错觉变得明显,最终证明是徒劳的。考虑以下代码:
var s = "foo"; s.bar = "cheese"; alert(s.bar); // undefined
尽管为基元 s 分配了一个属性,但尝试检索它会产生未定义的结果。这是因为该属性附加到临时包装对象,该对象在方法完成时被丢弃。
函数:真实对象
与基元相反,JavaScript 函数是合法对象,继承自 Object 原型。这使它们能够拥有属性并执行任何基于对象的方法。
函数中的属性分配
函数可以充当典型对象,允许属性分配和检索:
function foo() {} foo.bar = "tea"; alert(foo.bar); // tea
通过理解 JavaScript 中原语和合法对象之间的区别,我们消除了围绕“几乎一切都是对象”这一普遍概念的混乱。
以上是JavaScript 中字符串和数字真的是对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!