广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >V8实现字符串拼接
  • 306
分享到

V8实现字符串拼接

V8 字符串拼接 2023-05-18 20:05:00 306人浏览 薄情痞子
摘要

目录前言V8 是怎么执行加法操作的?总结前言 在之前的一篇文章 javascript 隐式类型转换规则中有提到,JavaScript 中的加号可以用来拼接字符串。本文就具体来介绍一下

前言

在之前的一篇文章 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 字符串拼接内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: V8实现字符串拼接

本文链接: https://www.lsjlt.com/news/212369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • V8实现字符串拼接
    目录前言V8 是怎么执行加法操作的?总结前言 在之前的一篇文章 JavaScript 隐式类型转换规则中有提到,JavaScript 中的加号可以用来拼接字符串。本文就具体来介绍一下...
    99+
    2023-05-18
    V8 字符串拼接
  • sqlserver字符串拼接的实现
    目录1. 概述2. 数字 + 字符串2.1 int + varchar2.2 decimal + varchar3. 数字 + 数字4.字符串 + 字符串5. 使用CAST和CONVERT函数进行类型转换1. 概述 在S...
    99+
    2023-02-02
    sqlserver字符串拼接 sqlserver拼接字符串
  • MySQL字符串拼接与分组拼接字符串实例代码
    目录一、经典拼接concat(x,x,....)二、分隔符拼接CONCAT_WS(separator,str1,str2,...)三、分组拼接GROUP_CONCAT(expr)补充:在筛选查询...
    99+
    2023-02-02
    mysql字符串拼接 mysql拼接多个字符串 mysql字符串拼接函数
  • python字符串拼接怎么实现
    在Python中,字符串拼接可以通过以下几种方式实现: 使用"+"操作符: str1 = "Hello" str2 = "Wor...
    99+
    2023-10-27
    python
  • mybatisPlus实现倒序拼接字符串
    目录倒序拼接字符串把sql用字符串拼接好后直接取出使用倒序拼接字符串 @ApiOperation("分页查询") @GetMapping(value = "/list...
    99+
    2022-11-13
  • Shell 字符串拼接的实现示例
    1. 字符串声明 概述 字符串的基本操作 脚本 1 # 声明字符串 str01="str01" echo ${str01} # 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解...
    99+
    2022-06-04
    Shell 字符串拼接
  • Java拼接list字符串
    List list = Arrays.asList("Java", "HTML", "JS", "Redis", "language");String result = list.stream().collect(Collectors.jo...
    99+
    2023-09-05
    java list 开发语言 tdd
  • 字符串拼接应用
    需求:在一个字符串后面追加指定的json串(一般是json串) CREATE PROCEDURE `update_add_white`( in update_info VARCHAR(2...
    99+
    2022-10-18
  • mybatisPlus怎么实现倒序拼接字符串
    这篇文章主要介绍了mybatisPlus怎么实现倒序拼接字符串的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatisPlus怎么实现倒序拼接字符串文章都会有所收获,下面我们一起来看看吧。倒序拼接字符串&n...
    99+
    2023-06-29
  • MySQL字符串拼接函数
    MySQL字符串拼接函数有以下三个: CONCATCONCAT_WSGROUP_CONCAT 1.CONCAT 说明 对指定字符进行拼接 语法 CONCAT(str1,str2,...) 语...
    99+
    2023-09-15
    mysql 数据库
  • mysql怎么拼接字符串
    mysql拼接字符串的方法:借助合并字符串函数CONCAT()输出。语法形式:CONCAT(str1,str2,...,strn);"mysql拼接字符串的示例:借助合并字符串函数CONCAT()输出,语法...
    99+
    2022-10-17
  • php如何拼接字符串
    在php中实现拼接字符串的方法首先,新建一个php项目文件;php项目文件新建好后,在文件中分别定义两个字符串,并赋值;$str1 = 'Hello';$str2 = 'World!';字符串定义好后,使用“.”符号即可对两个字符串进行拼接...
    99+
    2022-10-19
  • Java字符串拼接详解
    目录一、“+” 操作符二、StringBuilder(非线程安全)三、StringBuffer(线程安全)四、String 类的 concat 方法五、Str...
    99+
    2022-11-13
  • Python如何拼接字符串
    本文小编为大家详细介绍“Python如何拼接字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何拼接字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一种使用+号来实现:print('...
    99+
    2023-06-27
  • mysql字符串拼接换并行符
    这篇文章主要介绍了mysql字符串拼接换并行符,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!常用的字符串函数:函数说明CONCAT(s1,s2,...)返回连接参数产生的字符串,一个或多个待拼接...
    99+
    2023-06-06
  • 如何实现字符串拼接的批处理
    这篇文章主要为大家展示了“如何实现字符串拼接的批处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现字符串拼接的批处理”这篇文章吧。代码如下:@echo off ::&...
    99+
    2023-06-08
  • php数组转字符串 拼接
    随着PHP语言在Web开发中的广泛应用,数组是PHP中最常用的数据类型之一。在实际开发中,我们经常会遇到将数组转换成字符串或将多个字符串拼接成一个字符串的需求。本文将介绍PHP中数组转字符串和字符串拼接的方法。数组转字符串将数组转换成字符串...
    99+
    2023-05-19
  • python中如何拼接字符串
    在Python中,可以使用"+"运算符或者使用字符串的join()方法来拼接字符串。下面是两种方法的示例:1. 使用"+"运算符拼接...
    99+
    2023-08-11
    python
  • mysql中如何给查出的字符串拼接字符串
    mysql中查询字符串并实现字符串的方法首先,在命令行中启动MySQL服务;service mysql start   MySQL服务启动后,输入用户名和密码,登录mysql数据库;mysql -u root -p登录到MySQL数据库后,...
    99+
    2022-10-21
  • 字符串拼接格式化输出
    字符串拼接格式化输出就是把需要输出的内容编辑好以后赋值给一个变量,最后输出到屏幕上。方法一 name = input('your name:') age = int(input('your age:')) # int() str转...
    99+
    2023-01-30
    字符串
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作