首页 > 其他分享 >数据之间的类型转换

数据之间的类型转换

时间:2023-03-29 13:13:54浏览次数:31  
标签:类型转换 返回 console log NO -- 之间 YES 数据

1. 引用类型转换为原始类型的规则

graph TB A1(获取数据 data 与转换提示 hint) --> A2(data 是否为原始类型) A2 --YES--> A3(返回 data) A2 --NO--> A4(是否指定 hint) A4 --YES--> A5(hint 是否为 Number) A4 --NO--> A6(data 是否为 Date 类型) A6 --YES--> A7(hint = String) A6 --NO--> A8(hint = Number) A7 ---> A5 A8 ---> A9(能否调用 Symbol.toPrimitive 方法) A9 --NO--> A5 A9 --YES--> A10(调用 Symbol.toPrimitive 方法<br>返回值是否为原始类型) A10 --YES--> A12(返回原始类型) A10 --NO--> A13(报错 TypeError) A5 --YES--> A14(是否可以调用 valueOf 方法,<br>且对应返回值为原始类型) A14 --YES--> A15(返回该原始值) A14 --NO--> A16(是否可以调用 toString 方法,<br>且对应返回值为原始类型) A16 --YES--> A17(返回该原始值) A16 --NO--> A18(报错 TypeError) A5 --NO--> A19(是否可以调用 toString 方法,<br>且对应返回值为原始类型) A19 --YES--> A20(返回该原始值) A19 --NO--> A21(是否可以调用 valueOf 方法,<br>且对应返回值为原始类型) A21 --YES--> A22(返回该原始值) A21 --NO--> A23(报错 TypeError)

2. 原始类型之间的相互转换规则(隐式转换)

2.1 转换为数字 ToNumber

Argument Type Result
Undefined 返回 NaN
Null 返回 0
String 参考下面的规则
Boolean 如果是 true 则返回 1, 如果是 false 则返回 0
Number 返回输入的参数
Reference ToNumber(ToPrimitive(reference, "Number"))

2.1.1 String 转换为 Number 的规则

  1. 忽略开头与结尾的空白字符: 如 \n, , \t
    console.log(+"\n\t 123 \n\t") //=> 123
    
  2. 忽略无意义的前导零:
    console.log(+"000000123") //=> 123
    
  3. 允许十六进制 0x, 十进制, 八进制 0o, 二进制 0b 的整数输入, 允许十进制小数的输入, 允许科学计数法输入
    console.log(+"0x11")  //=> 17
    console.log(+"11")    //=> 11
    console.log(+"0o11")  //=> 9
    console.log(+"0b11")  //=> 3
    console.log(+"1.1")   //=> 1.1
    console.log(+"0x1.1") //=> NaN
    console.log(+"0o1.1") //=> NaN
    console.log(+"0b1.1") //=> NaN
    console.log(+"1e7")   //=> 10000000
    console.log(+"1e30")  //=> 1e30
    
  4. [第一个可视字符, 最后一个可视字符] 之间, 如若发现不符合数字规则的字符, 则返回 NaN
    console.log(+" 1 2 ") //=> NaN
    console.log(+"  1x ") //=> NaN
    console.log(+"1..2")  //=> NaN
    

2.2 转换为字符串 ToString

Argument Type Result
Undefined 返回 "undefined"
Null 返回 "null"
String 返回输入的参数
Boolean 如果是 false , 则返回 "false" , 如果是 true , 则返回 "true"
Number 参考下面的规则
Reference ToString(ToPrimitive(reference, "String"))

2.2.1 Number 转换为 String 的规则

  1. +0 , 0 , -0 都会转换为 "0"
  2. +Infinity , Infinity 会转换为 "Infinity" , -Infinity 转换为 "-Infinity"
  3. NaN 会转换为 "NaN"
  4. 特别大和特别小的数都会转变为科学计数法形式

2.3 转换为布尔值 ToBoolean

Argument Type Result
Undefined 返回 false
Null 返回 false
String 如果是空字符串 "" 则返回 false , 否则返回 true
Boolean 返回输入的值
Number 如果是 +0 , -0 , 0 , NaN 则返回 false , 否则返回 true
Reference 返回 true

3. 数据类型之间的相互转换

3.1 == 引起的数据转换

graph TB A1(定义 leftVal 和 rightVal) --> A2(leftVal 和 rightVal <br>类型是否相同<br>Reference, Number, String ...) A2 --YES--> A3(返回 leftVal 与 rightVal 的全等比较结果) A2 --NO--> A4(如果 leftVal 和 rightVal 中<br>null 和 undefined 一起出现) A4 --YES--> A5(返回 true) A4 --NO--> A6(如果有 Boolean 类型<br>则将布尔值进行 ToNumber 转换) A6 --> A7(如果两值分别为 Number 和 String 类型<br>则将字符串进行 ToNumber 转换) A7 --> A8(如果有 Reference 类型, <br>则对引用类型值进行 ToPrimitive 转换) A8 --> A2

3.2 >= , <= , < , >

返回 ToNumber(leftValue)ToNumber(rightValue) 比较的结果

3.3 二元运算符 +

  1. 将左右两边的值通过 ToPrimitive 进行转换为 leftPrimitiverightPrimitive
  2. 如果 leftPrimitiverightPrimitive 中有一个为 String 类型, 返回 ToString(leftPrimitive) + ToString(rightPrimitive) 的结果
  3. 否则, 返回 ToNumber(leftPrimitive) + ToNumber(rightPrimitive)

3.4 二元运算符 -

  1. 返回 ToNumber(leftValue) - ToNumber(rightValue) 的结果

3.5 一元运算符 + , -

  1. 返回 +/-ToNumber(value)

标签:类型转换,返回,console,log,NO,--,之间,YES,数据
From: https://www.cnblogs.com/suzukaze/p/type-convert.html

相关文章

  • 应用健康度隐患刨析解决系列之数据库时区设置
    作者:京东零售 董方酉引言应用健康度是反馈应用健康程度的指标,它将系统指标分类为基础资源、容器、应用、报警配置、链路这几项,收集了一系列系统应用的指标,并对指标进行......
  • .NET MVC 数据处理
    目录:数据访问层实体框架(EF)简述什么是代码优先的方法?实验8——在项目中添加数据访问层关于实验8实验9——创建数据输入屏幕实验10——获取服务端或控制器端传递的数......
  • Python基础 day7 数据类型(集合、字典、浮点型float)
    day7数据类型(集合、字典、浮点型float)课程概要:set集合,一个不允许重复重复&可变类型(元素可哈希)。dict字典,一个容器且元素必须是键值对。float类型,我们生活中常见的......
  • MySQL查询数据时间戳和日期的转换
    在数据库的使用中,经常需要按指定日期来查询记录,以便于统计,而在数据库中,有很多存储的是时间戳,也有的直接存日期,查询的时候可能不是那么好弄。mysql提供了两个函数:from_un......
  • 大数据应用时代来袭 SaaS走向没落?
    【编者按】本文作者RajDeDatta,BloomReach公司的CEO和创办人之一。随着大量的信息涌入互联网——90%的互联网是过去两年建立起来的——互联网公司正在想方设法去熟悉并利用......
  • 数据开发【配置文件】和【传参】规范
    概述配置文件概念:一种计算机文件,可给计算机程序配置参数和初始设置场景:软件开发时,生产环境数据库账号密码应写到配置文件,不应明文写到代码中常见的配置文......
  • 一文带你搞懂数据库事务
    本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 谈起数据库,事务是绕不开的话题。无......
  • 增量查数据库
    Person:IhopethatIcanincrementallyquerythedatabasetoobtaindata.Iwillstoretheresultsofeachdatabasequeryinredisandrecordthetimeaoft......
  • R语言Kmeans聚类、PAM、DBSCAN、AGNES、FDP、PSO粒子群聚类分析iris数据结果可视化比
    全文链接:http://tecdat.cn/?p=32007原文出处:拓端数据部落公众号本文以iris数据和模拟数据为例,帮助客户了比较R语言Kmeans聚类算法、PAM聚类算法、DBSCAN聚类算法、AGNE......
  • ARMA-GARCH-COPULA模型和金融时间序列案例|附代码数据
    原文链接: http://tecdat.cn/?p=3385最近我们被客户要求撰写关于ARMA-GARCH-COPULA的研究报告,包括一些图形和统计输出。最近我被要求撰写关于金融时间序列的copulas的调......