我的编程空间,编程开发者的网络收藏夹
学习永远不晚

V8实现字符串拼接

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

V8实现字符串拼接

前言

在之前的一篇文章 JavaScript 隐式类型转换规则中有提到,JavaScript 中的加号可以用来拼接字符串。本文就具体来介绍一下 V8 是如何来执行这一操作的......

V8 是怎么执行加法操作的?

当有两个值相加的时候,比如:

a+b

通俗理解,V8 会提供了一个 ToPrimitive 方法,其作用是将 ab 转换为原始数据类型,其转换流程如下:

  • 先检测该对象中是否存在 valueOf 方法,如果有并返回了原始类型,那么就使用该值进行强制类型转换。
  • 如果 valueOf 没有返回原始类型,那么就使用 toString 方法的返回值。
  • 如果 vauleOftoString 两个方法都不返回基本类型值,便会触发一个 TypeError 的错误。

将对象转换为原始类型的流程图如下所示:

当 V8 执行 1+"2" 时,因为这是两个原始值相加,原始值相加的时候,如果其中一项是字符串,那么 V8 会默认将另外一个值也转换为字符串,相当于执行了下面的操作:

Number(1).toString() + "2"

这里,把数字 1 偷偷转换为字符串 "1" 的过程也称为强制类型转换,因为这种转换是隐式的,所以如果我们不熟悉语义,那么就很容易判断错误。

我们还可以再看一个例子来验证上面流程,你可以看下面的代码:

var Obj = {
    toString() {
      return '200'
    }, 
    valueOf() {
      return 100
    }   
  }
  Obj+3

执行这段代码,你觉得应该返回什么内容呢?由于需要先使用 ToPrimitive 方法将 Obj 转换为原始类型,而 ToPrimitive 会优先调用对象中的 valueOf 方法,由于 valueOf 返回了 100,那么 Obj 就会被转换为数字 100,那么数字 100 加数字 3,那么结果当然是 103 了。

如果改造一下代码,让 valueOf 方法和 toString 方法都返回对象,其改造后的代码如下:

var Obj = {
    toString() {
      return new Object()
    }, 
    valueOf() {
      return new Object()
    }   
  }
  Obj+3

再执行这段代码,你觉得应该返回什么内容呢?因为 ToPrimitive 会先调用 valueOf 方法,发现返回的是一个对象,并不是原生类型,当 ToPrimitive 继续调用 toString 方法时,发现 toString 返回的也是一个对象,都是对象,就无法执行相加运算了,这时就会抛出一个异常,异常如下所示:

Uncaught TypeError: Cannot convert object to primitive value

提示的是类型错误,错误原因是无法将对象类型转换为原始类型。所以说,在执行加法操作的时候,V8 会通过 ToPrimitive 方法将对象类型转换为原始类型,最后就是两个原始类型相加,如果其中一个值的类型是字符串时,则另一个值也需要强制转换为字符串,然后做字符串的连接运算。在其他情况时,所有的值都会转换为数字类型值,然后做数字的相加。

总结

在 JavaScript 中,类型系统是依据 ECMAScript 标准来实现的,所以 V8 会严格根据 ECMAScript 标准来执行。在执行加法过程中,V8 会先通过 ToPrimitive 函数,将对象转换为原始字符串或者是数字类型,在转换过程中,ToPrimitive 会先调用对象的 valueOf 方法,如果没有 valueOf 方法,则调用 toString 方法,如果 vauleOftoString 两个方法都不返回基本类型值,便会触发一个 TypeError 的错误。

到此这篇关于V8实现字符串拼接的文章就介绍到这了,更多相关V8 字符串拼接内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

V8实现字符串拼接

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

V8实现字符串拼接

本文主要介绍了V8实现字符串拼接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

sqlserver字符串拼接的实现

目录1. 概述2. 数字 + 字符串2.1 int + varchar2.2 decimal + varchar3. 数字 + 数字4.字符串 + 字符串5. 使用CAST和CONVERT函数进行类型转换1. 概述在SQL语句中经常需要进
2023-02-02

MySQL字符串拼接与分组拼接字符串实例代码

目录一、经典拼接concat(x,x,....)二、分隔符拼接CONCAT_WS(separator,str1,str2,...)三、分组拼接GROUP_CONCAT(expr)补充:在筛选查询中进行字符串拼接并显示在表格里总结一、经典拼接
2023-02-02

python字符串拼接怎么实现

在Python中,字符串拼接可以通过以下几种方式实现:使用"+"操作符:str1 = "Hello"str2 = "World"result = str1 + str2print(result) # 输出:HelloWorld使用
2023-10-27

Shell 字符串拼接的实现示例

1. 字符串声明概述字符串的基本操作脚本 1# 声明字符串 str01="str01" echo ${str01}# 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解释 str02='str02' echo ${
2022-06-04

mybatisPlus怎么实现倒序拼接字符串

这篇文章主要介绍了mybatisPlus怎么实现倒序拼接字符串的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatisPlus怎么实现倒序拼接字符串文章都会有所收获,下面我们一起来看看吧。倒序拼接字符串
2023-06-29

如何实现字符串拼接的批处理

这篇文章主要为大家展示了“如何实现字符串拼接的批处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现字符串拼接的批处理”这篇文章吧。代码如下:@echo off :: 每6行拼接为一行,剩
2023-06-08

html怎么拼接字符串

在 html 中拼接字符串有两种方法:通过 + 运算符连接字符串和使用 template literals,使用符号反引号 (`)。可以使用空格或换行符分隔字符串,与数字拼接字符串,并且可以在复杂的表达式中使用括号。如何在 HTML 中拼接
html怎么拼接字符串
2024-05-21

sqlserver怎么拼接字符串

在SQL Server中,可以使用+操作符来拼接字符串。以下是使用+操作符拼接字符串的示例:DECLARE @str1 VARCHAR(50) = 'Hello';DECLARE @str2 VARCHAR(50) = 'World';
sqlserver怎么拼接字符串
2024-04-09

mysql如何拼接字符串

mysql 提供了 concat() 函数、|| 操作符、format() 函数、group_concat() 函数和 + 号来拼接字符串。MySQL 拼接字符串的方法MySQL 提供了多种拼接字符串的方法,本文将一一介绍。CONCAT
mysql如何拼接字符串
2024-06-14

c#怎么拼接字符串

在 c# 中拼接字符串有三种方法:使用加法(+)运算符、string.concat() 方法和 stringbuilder 类。最简单的方法是使用 + 运算符将字符串连接起来,例如 str1 + str2。concat() 方法提供更灵活的
c#怎么拼接字符串
2024-05-14

Python如何拼接字符串

本文小编为大家详细介绍“Python如何拼接字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何拼接字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一种使用+号来实现:print(Love
2023-06-27

mysql字符串拼接换并行符

这篇文章主要介绍了mysql字符串拼接换并行符,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!常用的字符串函数:函数说明CONCAT(s1,s2,...)返回连接参数产生的字符串,一个或多个待拼接的内容,
2023-06-06

编程热搜

目录