规范中的JavaScript的内置属性和操作方法

前置

  • 引用是已解析的名称绑定。引用由三个组件组成,即基值、引用名称和布尔值严格引用标志。基值是未定义的、Object、Boolean、String、Number或环境记录。未定义的基值表示引用无法解析为绑定。引用的名称是一个字符串。
  • 本规范中使用了两种环境记录值:声明性环境记录和对象环境记录。声明性环境记录用于定义ECMAScript语言语法元素(如FunctionDeclarations、VariableDeclaration和Catch子句)的效果,这些语法元素直接将标识符绑定与ECMAScript语言值相关联。对象环境记录用于定义ECMAScript元素(如Program和WithStatement)的效果,这些元素将标识符绑定与某些对象的属性相关联。

一些对象的内部通用属性

  1. \[prototype],可以通过Object.getPrototypeOf()方法拿到值
  2. \[class],一个字符串值,指示由规范定义的对象分类。
  3. \[call],执行与对象关联的代码。通过函数调用表达式调用。
  4. \[code],函数的ECMAScript代码。在标准的内置ECMAScript对象中,只有Function对象实现。
  5. \[ParameterMap],提供arguments对象的属性和关联函数的形式参数之间的映射。只有作为参数对象的ECMAScript对象才具有。
  6. \[scope],一种词法环境,用于定义执行Function对象的环境。在标准的内置ECMAScript对象中,只有Function对象实现
  7. \[Get],返回其值
  8. \[Put],设置其值
  9. \[Delete],从对象中删除指定的命名自身特性
  10. \[getProperty],返回此对象的命名属性的完全填充的属性描述符,如果不存在,则返回未定义的属性描述符。

getValue(v)

  1. 如果v不是一个引用则直接返回v本身
  2. let base = v的基值,如果基值是未定义的则抛出 ReferenceError 异常
  3. 如果基值是属性引用
    • 如果是对象,let get = 对象的\[GET]方法
    • 如果不是对象,则让get为下方定义的get方法
  4. 否则v一定是环境变量的基本值
    • 返回环境记录中已存在的绑定的值。如果严格布尔值为true,并且绑定不存在或未初始化,则引发ReferenceError异常。
  • 当V是具有基元基值的属性引用时,GetValue将使用以下\[Get]内部方法。它被称为使用基作为它的这个值,并使用属性P作为它的参数。采取以下步骤:
  1. let O = toObject(base)
  2. let desc = getProperty(O.p)
  3. if desc == undefined, return undefined
  4. 如果是value/writeable类型的,则返回desc.value
  5. 如果是setter/getter类型的
    • 如果getter不是函数,返回undefined
    • 如果返回getter的执行结果

putValue(v, w)

  1. 如果v不是引用,则抛出 ReferenceError 错误
  2. let base = v的基值
  3. 如果v是未定义的
    • 如果v的严格布尔值为true则抛出 ReferenceError 错误
    • 否则,将v作为全局对象的属性,并被赋值为w
  4. 如果v是属性引用
    • 是对象则调用内置的put方法,否则调用下面定义的put(同getValue操作,不过是赋值操作且异常是抛出TypeError)
  5. 到这里必然是环境变量的引用
    • 设置环境记录中已存在的可变绑定的值。name是绑定名称的文本。base是绑定的值,可以是任何ECMAScript语言类型的值。S是严格的模式引用布尔标志。如果S为true并且无法设置绑定,则引发TypeError异常

\[Delete]操作

  1. let desc = 当前属性的描述符
  2. if desc == undefined, return true
  3. if desc.Configurable == true, remove property and return true
  4. 否则 严格模式下抛出 TypeError
  5. 返回 false
相关推荐
wjj不想说话2 分钟前
你的小程序活动页,可能已经成了后台配置的杂物间
前端
梦想是准点下班4 分钟前
androidStudio打包,我又又又忘了
前端
槑有老呆4 分钟前
栈队列链表,三个故事就懂了
前端
ViavaCos21 分钟前
pnpm v11 的安全策略,让我踩了个坑
前端
To_OC23 分钟前
从一段定时器代码,重新捋清 JS 同步、异步与 Promise
前端·javascript·代码规范
持敬chijing24 分钟前
Web渗透之前后端漏洞-XSS漏洞原理攻击防御全流程
前端·安全·web安全·网络安全·网络攻击模型·安全威胁分析·xss
程序员黑豆31 分钟前
AI全栈开发 - Java:注释
前端·后端·ai编程
痕忆丶40 分钟前
Typora 的替代marktext,marktext切换中文
前端
拙慕JULY1 小时前
小程序返回 base64 文件报错
开发语言·javascript·小程序
数据知道1 小时前
字体与排版防线:ClientRects 与系统字体枚举的底层拦截与伪造
javascript·数据采集·指纹浏览器·风控·浏览器指纹