类型转换分类

  • 显示类型转换
  • Number( )
  • String( )
  • Boolean( )
  • 隐式类型转换
  • 运算
  • 判断语句
  • native调用
  • ..............

转换为字符串

1、转换为字符串场景

  1. 能使用的办法
  2. toString()
  3. String()
  4. 隐式转换(一般都是调用其toString)
  5. 加号运算的时候,如果某一边出现字符串,则是字符串拼接
  6. 把对象转换为数字,需要先toString()转换为字符串,再去转换为数字
  7. 基于alert/confirm/prompt/document.write...这些方式输出内容,都是把内容先转换为字符串,然后再输出的

2、转换字符串规则

把其他类型转换为字符串,一般都是直接""包起来,只有下面几种情况比较特殊

  • {}: 只有{}普通对象调取toString是调用的Object.prototype.toString,不是转换为字符串,而是检测数据类型,返回结果是“[object object]”,更准确的理解应该是如下

``` 1. 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果。需要注意的是,原始值到字符串的转换在表3-2中已经有了详尽的说明。

  1. 如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么JavaScript会调用valueOf()方法。如果存在这个方法,则JavaScript调用它。如果返回值是原始值,JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果。
  2. 否则,JavaScript无法从toString()或valueOf()获得一个原始值,因此这时它将抛出一个类型错误异常 ```
  3. []: 使用join()方法进行链接
String(null)                 // 'null'
String(undefined)            // 'undefined'
String(true)                 // 'true'
String(1)                    // '1'
String(-1)                   // '-1'
String(0)                    // '0'
String(-0)                   // '0'
String(Math.pow(1000,10))    // '1e+30'
String(Infinity)             // 'Infinity'
String(-Infinity)            // '-Infinity'
String(function(){})         // "function(){}"// 数组转换为字符串
String([])                    // ""
String(['a'])                // "a"
String([1,2])                // "1,2"
String(['a', 1])             // 'a, 1'
String([1,[2,3]])            // '1,2,3'// 对象转换为字符串
String({})                   // '[object Object]'
String({name: 12})           //  "[object Object]"

转换为数字

1、转换为数字场景

  1. 特定需要转换为Number的 方法
  2. Number([val])
  3. parseInt/parseFloat([val])
  4. 隐式转换(浏览器内部默认要先转换为Number在进行计算的)
  5. isNaN([val])
  6. 数学运算(特殊情况:+在出现字符串的情况下不是数学运算,是字符串拼接)
  7. 在==比较的时候,有些值需要转换为数字再进行比较

2、转换数字规则

一般隐式转换都是自动调用的Number

string -> number:

  • 如果是纯数字的字符串,则直接将其转换为数字
  • 如果字符串中有非数字的内容,则转换为NaN
  • 如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
  • 如果字符串中包含有效的十六进制格式,例如"0xf",则将其他转换为相同大小的十进制整数值;

Object -> number:

  • ``` // 先转换为字符串,在转换为数字
  • 如果对象具有valueOf()方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(如果需要的话)并返回这个数字。
  • 否则,如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回 [10] 。
  • 否则,JavaScript抛出一个类型错误异常。 ```
Number('') // 0
Number('    ') // 0
Number('123') // 123
Number('12.3') // 12.3
Number('12abc') //NaN
Number('0xf')   // 15
Number(undefined) //NaN
Number(null) // 0
Number(true) // 1
Number(false) // 0Number({}) // NaN
Number([]) // 0
Number([1]) // 1
Number([1, 2]) // NaNparseInt('12ab3') // 12
parseInt('ab124') //NaN
parseInt(12.3) // 12parseFloat('12ab3') // 12
parseFloat('ab124') //NaN
parseFloat(12.3) // 12.31+undfined // NaN
1 + null // 1

转换为布尔

  1. 基于以下方式可以把其它数据类型转换为布尔
  2. ! 转换为布尔值后取反
  3. !! 转换为布尔类型
  4. Boolean([val])
  5. 隐式转换
  6. 在循环或者条件判断中,条件处理的结果就是布尔类型值

规则:只有 ‘0、NaN、null、undefined、空字符串’ 五个值会变为布尔的FALSE,其余都是TRUE

https://blog.csdn.net/itcast_cn/article/details/82887895?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

==比较规则

  1. null==undefined:true,但是换成===结果是false(因为类型不一致),剩下null/undefined和其它任何数据类型值都不相等
  2. 字符串==对象 要把对象转换为字符串
  3. 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
{}=={}    // false
[]==[]    // false
NaN==NaN  // false//ull==undefined:true,剩下null/undefined和其它任何数据类型值都不相等
undefined == null // true
undefined == ''   // false
null == ''   // false'1' == new String(1) // true

题目推荐

{}+[] // 0
({}+[]) // "[object Object]"
[]+{} // "[object Object]"{a:0}+1 // 1

{}+[] = 0这个怎么理解呢?

现在在写代码过程中,每个项目组的规范会有所不同,有些项目组结尾加分号,有些则不加,当不加分号的时候,下面代码也不会在代码中报错,

function getName(){}
+[]// 压缩后
function getName(){}+[]
所以最后 就计算 +[] // 0


![] // false ->!(Boolean([]))
+[]  // 0+![]  // 0
[]+[] // ""
{}+{}//"[object Object][object Object]"
[]+![] // false  => 先计算![],再把[]转换为String([])
''+{} //"[object Object]"
{}+'' //0// 数组访问map属性
[]["map"] // ƒ map() { [native code] }
[]['map']+[] // "function map() { [native code] }"[]==![] // true  都转换为数字都是0
let result = 10+false+undefined+[]+'Tencent'+null+true+{}; // "NaNTencentnulltrue[object Object]"

解析过程

》 10 + false // 10,10 + Number(false) = 10 ,10 + 0 = 10
》 10 + undefined // 10 + Number(undefined) = 10 + NaN = NaN
》 NaN + [] = NaN + String([]) = NaN + '' = 'NaN';
》 'NaN' + 'Tencent' = 'NaNTencent'
》 'NaNTencent' + null = 'NaNTencent' + String(null) = 'NaNTencent' + 'null' =       'NaNTencentnull'
》 'NaNTencentnull' + true = 'NaNTencentnull' + String(true) = 'NaNTencentnull' + 'true' ='NaNTencentnulltrue'
》 'NaNTencentnulltrue' + String({})= 'NaNTencentnulltrue'+'[object Object]' = 'NaNTencentnulltrue[object Object]'

参考链接

https://wangdoc.com/javascript/features/conversion.html

js类型转换的各种玩法

转换string_类型转换详解相关推荐

  1. java自动转换_java类型转换详解(自动转换和强制转换)

    自动转换 class Hello { public static void main(String[] args) { //自动转换 int a = 5; byte b = 6; int c = a ...

  2. jquery将html转为pdf文件,HTML+CSS入门 jsPDF插件实现将HTML页面转换成PDF详解

    本篇教程介绍了HTML+CSS入门 jsPDF插件实现将HTML页面转换成PDF详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.目的:在前段是 jQuery库 或 ...

  3. 怎样将pdf转换成jpg详解

    怎样将pdf转换成jpg详解 [摘要]当你把扫描好的PDF文件送到印刷室进行印刷时,而人家并不接受PDF文件格式,只认同图片格式的文件,此时你肯定想着怎么才能把PDF文件转变成JPG图片格式?那么,接 ...

  4. java中带符号十六进制转换成十进制详解

    java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...

  5. “戏”说Spark-Spark核心-RDD转换操作算子详解(一)

    "戏"说Spark-Spark核心-RDD转换行动类算子详解 算子概述 对于RDD可以有两种计算方式: 转换(返回值还是一个RDD)---懒执行 操作(返回值不是一个RDD)--- ...

  6. Mysql 数据类型转换详解 (convert、cast)

    文章目录 1 概述 2 类型转换 3 扩展 3.1 日期时间函数 1 概述 #mermaid-svg-ItXfZsGMo79eou3H {font-family:"trebuchet ms& ...

  7. 小白学python之整型,布尔值,十进制二进制转换和字符串详解for循环!

    整型与字符串转化 十进制转二进制. python2,存在int 整型和long(长整型),在python3里就是int/获取的是浮点数 小数 print(bin(15)) 这样可以通过代码来计算十进制 ...

  8. html中隐式转换成数字,详解JS中的隐式类型转换

    JS中隐式类型转换 JS中的数据类型 JS中的数据类型分为两大类: 1.基本数据类型: 1.String 字符串 表示一段文本,例如:人的姓名.地址等 2.Number 数值 3.Boolean 布尔 ...

  9. VC常见数据类型转换详解

    我们先定义一些常见类型变量借以说明   int  i  =  100;   long  l  =  2001;   float  f=300.2;   double  d=12345.119;   c ...

最新文章

  1. PostgreSQL 9.3 beta2 stream replication primary standby switchover bug?
  2. peewee flask pwiz 中使用模型 过一段时间报错 peewee.InterfaceError: (0, '') 的解决方式
  3. UNIX再学习 -- 标准I/O
  4. linux du命令使用:目录大小排序
  5. java代码复数包括虚部和实部,Java中编写Applet程序验证复数类(在问题补充中)实现接收用户输入的复数的实部和虚部,计算复数与复数,复数与实数的加减,乘除操作...
  6. PHP vscode+XDebug 远程断点调试服务器上的代码
  7. Cas单点登录配置数据查询用户
  8. c程序设计停车场收费管理系统_智能车牌识别停车收费管理系统
  9. wxpython wx listctrl_wxPython实现指定单元格可编辑的ListCtrl | 学步园
  10. 全屏窗口指令_在iOS 14系统中,快捷指令原来有多达11种运行方式(上篇)
  11. KD树(网易游戏笔试)
  12. 大学物理复盘 | 简明大学物理学第一章——质点运动学思维导图梳理(复习专用)
  13. 【基于机器视觉与深度学习的人机对弈机器人——决策篇】
  14. 抓包软件wireshark分析
  15. 递归的理解(数据结构)
  16. 百度翻译用户群体及部分功能分析
  17. 资产信息网赋能律师事务所律师
  18. 网页打开新窗口——Window.open()详解
  19. 【报错及解决】Variable w already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally
  20. h'tml和java代码,Tapestry 教程(七)在Tapestry中一起使用Hibernate

热门文章

  1. mysql 类型 自动转化_自动MySQL数据类型转换
  2. ANSI和UNICODE字符串处理函数
  3. CListCtrl的用法总结
  4. mseloss pytorch_PyTorch 卷积与BatchNorm的融合
  5. Python-OpenCV 笔记3 -- 霍夫变换(Hough)
  6. 牛客多校三 B Black and white
  7. 【机器学习】图解机器学习中的 12 种交叉验证技术
  8. 【数学基础】一份非常适合人工智能学习的概率论基础材料中文版 (CS229概率论)...
  9. 【Python基础】Python安装第三方库太慢?配置好这个速度飞起
  10. 【机器学习基础】时间序列测试题的40题,看看你对时间序列的了解水平