JS中数据类型转换汇总

JS中的数据类型分为

【基本数据类型】

数字 number

字符串 string

布尔 boolean

空 null

未定义 undefined

【引用数据类型】

对象 object

- 普通对象

- 数组对象 (Array)

- 正则对象 (RegExp)

- 日期对象 (Date)

- 数学函数 (Math)

...

函数 function

真实项目中,根据需求,我们往往需要把数据类型之间进行转换

把其它数据类型转换为number类型

1.发生的情况

  • isNaN检测的时候:当检测的值不是数字类型,浏览器会自己调用Number方法把它先转换为数字,然后再检测是否为非有效数字
isNaN('3') =>false
Number('3')->3
isNaN(3)->false isNaN('3px') =>true
Number('3px')->NaN
isNaN(NaN)->true
  • 基于parseInt/parseFloat/Number去手动转换为数字类型
  • 数学运算:+ - * / %,但是“+”不仅仅是数学运算,还可能是字符串拼接
'3'-1 =>2
Number('3')->3
3-1->2 '3px'-1 =>NaN '3px'+1 =>'3px1' 字符串拼接 var i='3';
i=i+1; =>'31'
i+=1; =>'31'
i++; =>4 i++就是单纯的数学运算,已经摒弃掉字符串拼接的规则
  • 在基于“==”比较的时候,有时候也会把其它值转换为数字类型
  • ...

2.转换规律

//=>转换的方法:Number(浏览器自行转换都是基于这个方法完成的)

【把字符串转换为数字】
只要遇到一个非有效数字字符,结果就是NaN
'' ->0
' ' ->0 空格(Space)
'\n' ->0 换行符(Enter)
'\t' ->0 制表符(Tab) 【把布尔转换为数字】
true ->1
false ->0 【把没有转换为数字】
null ->0
undefined ->NaN 【把引用类型值转换为数字】
首先都先转换为字符串(toString),然后再转换为数字(Number)

把其它类型值转换为字符串

1.发生的情况

  • 基于alert/confirm/prompt/document.write等方法输出内容的时候,会把输出的值转换为字符串,然后再输出
alert(1) =>'1'
  • 基于“+”进行字符串拼接的时候
  • 把引用类型值转换为数字的时候,首先会转换为字符串,然后再转换为数字
  • 给对象设置属性名,如果不是字符串,首先转换为字符串,然后再当做属性存储到对象中(对象的属性只能是数字或者字符串)
  • 手动调用toString/toFixed/join/String等方法的时候,也是为了转换为字符串
var n=Math.PI;//=>获取圆周率:
n.toFixed(2) =>'3.14' var ary=[12,23,34];
ary.join('+') =>'12+23+34'
  • ...

2.转换规律

//=>调用的方法:toString

【除了对象,都是你理解的转换结果】
1 ->'1'
NaN ->'NaN'
null ->'null'
[] ->''
[13] ->'13'
[12,23] ->'12,23'
... 【对象】
{name:'xxx'} ->'[object Object]'
{} ->'[object Object]'
不管是啥样的普通对象,最后结果都一样

把其它值转换为布尔类型

1.发生的情况

  • 基于!/!!/Boolean等方法转换
  • 条件判断中的条件最后都会转换为布尔类型
  • ...
if(n){
//=>把n的值转换为布尔验证条件真假
} if('3px'+3){
//=>先计算表达式的结果'3px3',把结果转换为布尔true,条件成立
}

2.转换的规律

只有“0/NaN/''/null/undefined”五个值转换为布尔的false,其余都是转换为true

特殊情况:数学运算和字符串拼接 “+”

//=>当表达式中出现字符串,就是字符串拼接,否则就是数学运算

1+true =>2 数学运算
'1'+true =>'1true' 字符串拼接 [12]+10 =>'1210' 虽然现在没看见字符串,但是引用类型转换为数字,首先会转换为字符串,所以变为了字符串拼接
({})+10 =>"[object Object]10"
[]+10 =>"10" {}+10 =>10 这个和以上说的没有半毛钱关系,因为它根本就不是数学运算,也不是字符串拼接,它是两部分代码
{} 代表一个代码块(块级作用域)
+10 才是我们的操作
严格写法:{}; +10;

思考题:

12+true+false+null+undefined+[]+'佳佳'+null+undefined+[]+true
=>'NaN佳佳nullundefinedtrue' 12+true ->13
13+false ->13
13+null ->13
13+undefined ->NaN
NaN+[] ->'NaN'
'NaN'+'佳佳' ->'NaN佳佳'
...
'NaN佳佳rueundefined'
'NaN佳佳trueundefined'+[] ->'NaN佳佳trueundefined'
...
=>'NaN佳佳trueundefinedtrue'

特殊情况:“==”在进行比较的时候,如果左右两边的数据类型不一样,则先转换为相同的类型,再进行比较

对象==对象:不一定相等,因为对象操作的是引用地址,地址不相同则不相等

{name:'xxx'}=={name:'xxx'} =>false
[]==[] =>false var obj1={};
var obj2=obj1;
obj1==obj2 =>true

==========================>上面是重点强调的

对象数字:把对象转换为数字

对象布尔:把对象转换为数字,把布尔也转换为数字

对象字符串:把对象转换为数字,把字符串也转换为数字

字符串数字:字符串转换为数字

字符串布尔:都转换为数字

布尔数字:把布尔转换为数字

===========================>不同情况的比较,都是把其它值转换为数字,然后再进行比较的

nullundefined:true

null=undefined:false

null&&undefined和其它值都不相等

NaN==NaN:false

NaN和谁都不相等包括自己

===========================>以上需要特殊记忆

1==true =>true
1==false =>false
2==true =>false 规律不要混淆,这里是把true变为数字1 //未掌握 []==true:false 都转换为数字 0==1
![]==true:false []==false:true 都转换为数字 0==0
![]==false:true 先算![],把数组转换为布尔取反=>false =>false==false

JS中数据类型转换的更多相关文章

  1. JavaScript中数据类型转换总结

    JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...

  2. JS 之 数据类型转换

          首先我们来简单了解一下JS中的数据类型,JavaScript拥有字符串.数字.布尔.数组.对象.Null.Undefiend 6中数据类型.同一时候,JavaScript拥有动态类型. 也 ...

  3. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

  4. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  5. Java中数据类型转换&基本类型变量和对象型变量

    1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型    byte,short,int,lo ...

  6. PHP中数据类型转换的三种方式

    PHP中数据类型转换的三种方式 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: 1.(int).(integer):转换成整形2.(float).(double).(real):转换成 ...

  7. js | JavaScript中数据类型转换总结

    转载 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = “123”; a = Number(a); ...

  8. JS的数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...

  9. js基础---数据类型转换

    js中数据类型: 简单数据类型: number:233,-34,0x23,023 string:"hello"或者'hello' boolean:true.false undefi ...

随机推荐

  1. pt-online-schema-change使用详解

    一.pt-online介绍 pt-online-schema-change是percona公司开发的一个工具,在percona-toolkit包里面可以找到这个功能,它可以在线修改表结构 原理: 首先 ...

  2. python 31 升级版解决粘包现象

    目录 1. recv 工作原理 2.升级版解决粘包问题 3. 基于UDP协议的socket通信 1. recv 工作原理 1.能够接收来自socket缓冲区的字节数据: 2.当缓冲区没有数据可以读取时 ...

  3. Docker资源管理

    一台宿主机可以放多个容器,默认的情况下,Docker 没有对容器进行硬件资源的限制,当容器负载过高时会尽可能的占用宿主机资源,所以有时候我们需要对容器的资源使用设置一个上限,今天我们就来看看如何管理 ...

  4. CAS及其ABA问题

    CAS.volatile是JUC包实现同步的基础.Synchronized下的偏向锁.轻量级锁的获取.释放,lock机制下锁的获取.释放,获取失败后线程的入队等操作都是CAS操作锁标志位.state. ...

  5. spss分析存在共性线后,接下来是怎么分析?

    在进行线性回归分析时,容易出现自变量(解释变量)之间彼此相关,这种情况被称作多重共线性问题. 适度的多重共线性不成问题,但当出现严重共线性问题时,可能导致分析结果不稳定,出现回归系数的符号与实际情况完 ...

  6. codeforces 816 D. Karen and Test(逆元+思维+组合数)

    题目链接:http://codeforces.com/contest/816/problem/D 题解:显然一看到这题应该会想到是有什么规律的于是多写几项就会发现偶数列之间是有关系的. 满足a[i][ ...

  7. Educational Codeforces Round 69 (Rated for Div. 2)

                                                                                                  A. DIY ...

  8. Go操作MySQL

    MySQL是常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的 ...

  9. springboot中动态修改logback日志级别

    springboot中动态修改logback日志级别 在spring boot中使用logback日志时,项目运行中,想要修改日志级别. 代码如下: import org.slf4j.Logger; ...

  10. Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...