【问题标题】:How can I directly access [[PrimitiveValue]] value in JavaScript [closed]如何在 JavaScript 中直接访问 [[PrimitiveValue]] 值 [关闭]
【发布时间】:2016-05-16 00:16:33
【问题描述】:

有没有办法直接访问 JavaScript 对象类型的 [[PrimitiveValue]],例如字符串还是数字?

【问题讨论】:

  • 直接访问有什么用?获取/设置值?实施新方法?
  • String.prototype.toString(), Number.prototype.valueOf()
  • 或者使用更少的代码:'' + stringObj+numberObj
  • @Pointy — valueOf 可用于两者。 ;-)
  • [[PrimitiveValue]](如果有的话)是源自 ECMAScript 参考的术语,它描述了实施 ECMAScript 的逻辑,而不是用户空间 API。换句话说,它是在幕后进行的,对编写 JavaScript 引擎 的人很重要,而不是对用 Javascript 编写程序的人。 – 如果不是这样,请澄清该术语的上下文以及您需要它的确切用途。

标签: javascript


【解决方案1】:

有没有办法直接访问 JavaScript 对象类型的 [[PrimitiveValue]],例如StringNumber?

不,没有。

原始值由JS在需要原始值的上下文中使用对象时获得,它通过在对象上调用valueOf方法来实现。如 cmets 中所述,需要原语的上下文包括 +numberObj'' + stringObj 和通过 Number(numberObj) 进行的“转换”。请注意,Object(false) && true 之类的构造 将布尔对象转换为原语,if (Object(false)) 也不会(因此成功)。

另请注意,valueOf 可以被覆盖,在这种情况下,不存在可以或将要检索基础原始值的情况。

【讨论】:

    【解决方案2】:

    从某种意义上说不是,因为就 ES6 标准而言,[[Primitive Value]] 是一种内部转换算法,而不是结果,它采用要处理的输入值和指定返回值的首选类型的可选参数。该算法通常用于自动类型转换,并不总是为给定的输入返回相同的数据类型。

    [[Primitive Value]] 算法可以分为标准算法和奇异算法。如果未提供,标准方法是将首选结果类型默认为“数字”。为Date Objects 实现的外来算法为转换结果提供了自己的默认值。

    当然,如果需要,将 String 对象转换为字符串数据类型(例如 "" + strObj)或将 Number 对象转换为数字数据类型(例如 +numObj)是微不足道的。在大多数情况下,它可能会自动为您完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      相关资源
      最近更新 更多