【问题标题】:Is it correct to say that a javascript variable points to a value?说javascript变量指向一个值是否正确?
【发布时间】:2016-10-12 16:37:20
【问题描述】:

我听说 JavaScript 实际上并不像其他语言那样“指向”内存中的值(或对象,因为在 JS 中一切都是对象)。相反,JS 变量引用内存中的其他值/对象。这是真的?指向和引用之间的语义区别是什么?

【问题讨论】:

标签: javascript variables reference


【解决方案1】:

变量名

JavaScript 变量名称用作保存变量值的对象的属性名称键,例如代码范围内函数的environment record 对象或全局对象本身。所以变量名访问变量值和数据类型的对象属性实现。

在这个模型下,是的,JavaScript 值不会“指向”任何东西,它们是保存变量值的对象的属性名称。

数据类型

Javscript 中的一切都是对象?没有。Javascript 包含原始数据类型,例如“数字”、“布尔”、“空”等,可以用内存中有限数量的八位字节表示,原始数据类型“字符串”可以使用可变数量的内存,以及一个复杂的数据类型“对象”,它也可以使用可变数量的内存。 每种数据类型如何保存在对象属性中并被调用以供访问取决于实现,并且超出了此答案的范围

引用、指针和 JavaScript

根据 cmets 中链接的问题,指针是使用内存地址的特定类型的引用。更一般地说,“引用”涵盖了用于访问另一个值的任何值,并且可能包括内存地址、表索引或用于访问某些内容的键。

对象数据类型。

为了完整性

对象数据类型实际上是一种引用数据类型,它包含一个引用某种,Javascript 引擎使用该引用来访问为对象保存的数据。相同对象引用的每个等值副本都访问相同的底层对象数据结构。

因此,对作为参数传递给函数的对象属性所做的更改在返回时会持续存在,并且在多个变量设置为相同对象值的情况下,每个变量都访问同一组对象属性。

【讨论】:

  • 即使像 NumberString 这样的原始类型也是对象。它们的内部表示方式可能与其他类型的对象不同,但它们仍然是对象。 (它们有属性、原型等等。)
  • NumberString 对象是原始数据类型的包装器。但是,如果将这样的原始值用作对象,则原始类型将在操作期间转换为其包装对象的实例,并且不再转换。例如,将var n=1; n.x="x" 之后的n.x 的值与var n = new Number(1); n.x="x" 进行比较(两者都不会引发错误)。 @RaymondChen
  • 有物有物。
  • 关于"JavaScript variable names are used as property name keys of an object",谁能澄清1)这个对象是什么? 2) 它有什么属性?我希望能够将其可视化。我知道有两种值类型(基元和对象),并且我知道基元具有相应的对象包装器,因此可以在它们上调用方法。但我还不能理解的是标识符(即变量的“名称”)如何成为对象的属性,如果是,那么该对象是什么以及它是什么样的?谢谢。
  • ps 最后评论 - 我正在查看这两个站点以尝试可视化“引擎盖下”的 JavaScript 变量的结构,但不确定它们显示的内容是否是抽象模型而不是JavaScript 的实际“对象模型”:astexplorer.netesprima.org/demo/parse.html。我也不知道如何在浏览器中使用console.log() 显示这种对象信息。
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多