哪里是ECMAScript中定义的对象的可变性?(Where is the mutability o

2019-09-26 14:07发布

在这个问题有关的论据JavaScript函数的流逝,我们知道这一切都是通过值在JavaScript中通过。

在Mozilla的文件 ,它被提及的基本类型是不可改变的,和对象。 虽然我从程序和结构化编程放学,我能够赶快拿起概念。

在ECMAScript标准,它定义了“的对象是‘逻辑上’的属性的集合”。 该标准还定义了对象是如何被相提并论,但在当物体穿过的GetValue()伪函数转换为参考值,会发生什么情况排除在外。

所以,我给了一个答案的问题,基本上说,这一地区已经离开了不确定。

我的问题

我觉得用“未定义”,我的意思是,这不是哲学彻底说清楚,什么对象的值。 该标准已通过了几个版本了,它的大小也在不断提高。

简而言之,对象是一个集合,但什么是收藏价值? 它是其内容的妆容? 或者是它的个性? 还是我已经错过了一些重要的文本?

Answer 1:

在ECMAScript的规格,每个对象被定义为具有特定的内部的方法“,其中一些(例如,[[DefineOwnProperty]]和[[把]])可以改变对象的状态。 最终,对象的可变性,通过使用这样的内部方法定义。



Answer 2:

的GetValue()不离开会发生什么对象 - 步骤#1:

If Type(V) is not Reference, return V.

所以,你传递一个对象,你得到相同的对象。

(这驳斥你的前提之一,但我不知道它解决了你的问题。)



Answer 3:

见5.1版的第4.3.26“属性”。 票据上写着:

取决于值可以表示直接作为数据值(原始值,对象,或一个函数对象)的属性的形式或间接由一对存取器函数。

我们可以以此为意的数据值是下列之一:

  1. 原始值:如C语言双,_Bool,((无效*)0)等。
  2. 对象:其可被解释为包含关于对象的垫层信息的特殊C语言结构。
  3. 功能对象:其为2只是一个特例,JIT编译的可能的结果。

这之所以注:对于财产的定义是很重要的,因为,一切 - 甚至功能块范围 - 是(在一个方面说明,或至少)对象。 因此,如果我们可以确定“的对象的价值”是其个性而不是其内容的妆,然后用一个事实,即每个对象从一个JavaScript程序访问,是因为如果一些其他对象的属性进行访问。


在第4.2节“语言概述”,它说:

原始值是以下内置类型中的一个的成员: 未定义 ,NULL, 布尔数字字符串 ; 一个目的是剩余的内装型对象的成员; 和一个功能是一个可调用对象。

虽然这是一个非正式的部分,可以看到一个对象从在显著方式原始值不同。

作为一个解释,让我们考虑一个对象的值是对象本身,我们可以从“的GetValue()”伪功能的推断 - 概述说“的对象是... Object类型的成员 - 因此,值是会员的对象类型。

要使用物理比喻来解释会员与个性之间的关系,我们看到太多的电子。 这些内容一致,他们都是宇宙的成员,但它们是两个不同的个体。

因此,我们推断 - JavaScript对象的价值,是它的个性。


最后来了一个问题,问的称号。

各个对象的mutibility在一系列的specificational伪函数来定义,以及其他类型的不变性是使用的类型和规格的伪功能上基本类型的值的运转值的成员的定义中所定义。



文章来源: Where is the mutability of Objects defined in ECMAScript?