为什么在字符串连接操作中不调用 Number.toString() ?

2023-12-04

在尝试默认行为时Object.toString()函数,我注意到像下面这样的字符串连接可以预见地调用toString()在目标对象上:

var x = { toString: () => "one" };
var y = { toString: () => "two" };
var output = 'x is ' + x + ' while y is ' + y;
console.log(output); // writes "x is one while y is two" to the console

然而,当toString()在原型中被重写Number and Boolean, 例如。有必要“强制”toString()调用以获得所需的输出:

Number.prototype.toString = () => "42";
Boolean.prototype.toString = () => "whatever you wish";

var a = 1;
console.log('The answer is ' + a); // writes "The answer is 1"
console.log('The answer is ' + a.toString()); // writes "The answer is 42"

var b = true;
console.log('Girl you know it\'s ' + b); // writes "Girl you know it's true"
console.log('Girl you know it\'s ' + b.toString()); // writes "Girl you know it's whatever you wish"

这在浏览器中是一致的(在 Chrome、Firefox 和 Edge 上测试过),所以我认为这是标准行为。它记录在哪里?是否有在字符串连接期间得到特殊处理的标准对象的列表?


JavaScript 可以在数字基元和数字对象之间自由转换。

如果你看一下的规则+操作员你会看到它说:

7 令 alprim 为 ToPrimitive(laval)。

and

9 设 rprim 为 ToPrimitive(rval)。

所以在处理的时候+它将尝试使用对象上的原语。

然后它有字符串规则将原语转换为字符串。

数量 参见 7.1.12.1。

…然后描述了一个很长的特殊情况.


简而言之:

它将值转换为基元,然后具有将数字转换为字符串的特殊情况规则。

这意味着它不会将其视为对象或调用.toString通常可以覆盖此类规则的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在字符串连接操作中不调用 Number.toString() ? 的相关文章

随机推荐

  • 与 cloudFront 中的最小、最大和默认 TTL 混淆

    我的 Web 应用程序位于 S3 中 并使用 cloudFront 的 Web 发行版为该应用程序提供服务 我给了官方文档读过 但对很多术语感到困惑 我的问题 我想将cloudFront缓存设置为最长1年 365天 为此 我需要做什么 我们
  • 扩展 CodeIgniter 中的模型

    好吧 我是 CodeIgniter 框架的新手 我正在尝试构建一个通用模型类 看 class Basic Model extends CI MODEL function construct Call the Model constructo
  • 如何使用 AWS Cognito 限制自定义 api 访问

    我在我的应用程序中使用 Spring Boot 在搜索一些 IAM 工具时 我实际上很喜欢 Auth0 但我负担不起他们的定价 所以 我找到了另一个叫AWS Cognito 下面是Auth0来限制我们自定义的访问api https auth
  • 如何使用 python 从 Azure Cosmos DB 读取数据

    我有一个 Azure 试用帐户 并将一些 JSON 文件上传到 CosmosDB 中 我正在创建一个 python 程序来查看数据 但我在这样做时遇到了困难 这是我到目前为止的代码 import pydocumentdb documents
  • Android Studio Logcat 过滤器不显示

    我在 Ubuntu 13 10 上使用 AndroidStudio 0 4 0 在 0 3 2 上遇到同样的问题 一切都很好 直到我在 Android 和 ddms ddms 视图中丢失了 logcat 过滤实用程序和设备选择侧栏 然而 程
  • Facebook android sdk如何获取给定页面的点赞数

    我想获取给定页面及其 id 的点赞数 这里是图形API请求我想用 facebook android sdk 进行翻译 我不知道如何制作它 如果我尝试 我会收到错误 Bundle params new Bundle params putStr
  • 如何在 Chrome 中播放 .avi 文件格式的视频?

    从技术上讲 可以通过直接在 HTML 中加载外部播放器的嵌入对象来播放 avi 文件 现在铬已弃用该功能和解决方案将我的所有视频文件转码为 mp4 Edited因为我不拥有这些文件 所以我不会假装对它们进行转码 我期待着一种方法来重新启用旧
  • 将坐标外推到画布对象的边缘

    我正在编写一个浏览器应用程序 试图发现图像中的兴趣点 一旦我计算出这些点 我就会在它们之间画一条线 我的应用程序需要将这些线条推断到画布的边缘 有谁有 javascript 中线性图计算的经验吗 我已经进行了演示 function func
  • 以编程方式在闪亮仪表板中切换侧边栏菜单的显示

    我正在使用 R 闪亮仪表板 想知道是否可以使用附加按钮折叠 显示侧边栏 就像侧边栏顶部已有的按钮一样 那可能吗 Cheers 您可以通过以下方式向正文添加 删除所需的 css 类shinyjs library shiny library s
  • pyodbc 在 sp_prepexec 之后调用 sp_unprepare。这会影响参数化查询的性能吗?

    继续 SqlAlchemy pymssql 原始参数化查询会使用相同的执行计划吗 我从 pymssql 切换到 pyodbc 尝试将参数化查询发送到 SQL Server 带有 Microsoft 驱动程序的 pyodbc 可以解决问题 但
  • 操作委托使用在 foreach 循环外部声明的变量的最后一个值[重复]

    这个问题在这里已经有答案了 我有这段代码 int i 0 foreach var tile in lib dic Values var ii i var t tile Button b new Button gt MainStatic ti
  • MySQL 无法存储 UTF8 字符

    找不到我无法在 MySQL 数据库中存储 等字符的原因 我的表定义是 CREATE TABLE IF NOT EXISTS gen admin words translated id int 10 NOT NULL AUTO INCREME
  • 查询Elasticsearch上各类型的最新文档

    我正在尝试在 Elasticsearch 上运行看似简单的查询 但我似乎无法获得我正在寻找的结果 这是我正在尝试做的事情的一个简短示例 我有一个新闻数据库 每条新闻都包含来源 标题 时间戳和用户 我想要获取给定用户的每个可用来源的最后一个
  • 将浮点数转换为位置格式的字符串(没有科学记数法和错误精度)

    我想打印一些浮点数 以便它们始终以十进制形式写入 例如12345000000000000000000 0 or 0 000000000000012345 不在科学计数法 但我希望结果达到 15 7有效数字IEEE 754 双精度 仅此而已
  • 将对象的地址添加到循环向量中

    我需要创建几个对象并将它们放入一个列表中 我正在使用 std vector 另外 我需要列表项指向对象的地址 以便我对对象所做的更改也反映在列表中 但问题是 列表中的每个项目都指向循环中创建的最后一个对象 for int i 0 i lt
  • Netbeans PHP - 添加/删除花括号插件/快捷方式

    我喜欢不带大括号的简短 if 语句 PHP 例如 if x y echo z 如果我想添加几行 可能只是临时用于调试 我必须手动添加大括号 是否有一个 Netbeans 插件可以通过快捷方式执行此操作 例如 切换 添加 删除 先前的语句大括
  • 如何通过 Java 8 谓词仅过滤特定元素?

    我有收藏List
  • 来自字节的图像(python)

    我在 python 中有一个字节数组 从任意文本文件转换而来 并且想使用这些字节作为 RGB 值来存储在图像中 做这个的最好方式是什么 谢谢 这是一种迟到的回应 但也许它会在将来帮助其他人 希望我正确地解释了你的问题 但是如果你的 任意文本
  • 使用 python 模块分发预构建的库

    我使用以下脚本来分发包含纯 python 代码的模块 from distutils core import setup Extension import os setup name mtester version 0 1 descripti
  • 为什么在字符串连接操作中不调用 Number.toString() ?

    在尝试默认行为时Object toString 函数 我注意到像下面这样的字符串连接可以预见地调用toString 在目标对象上 var x toString gt one var y toString gt two var output