JS中数据类型转换汇总

JS中的数据类型分为

【基本数据类型】

数字 number

字符串 string

布尔 boolean

空 null

未定义 undefined

【引用数据类型】

对象 object

- 普通对象

- 数组对象 (Array)

- 正则对象 (RegExp)

- 日期对象 (Date)

- 数学函数 (Math)

...

函数 function

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

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

1.发生的情况

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

2.转换规律

  1. //=>转换的方法:Number(浏览器自行转换都是基于这个方法完成的)
  2. 【把字符串转换为数字】
  3. 只要遇到一个非有效数字字符,结果就是NaN
  4. '' ->0
  5. ' ' ->0 空格(Space)
  6. '\n' ->0 换行符(Enter)
  7. '\t' ->0 制表符(Tab)
  8. 【把布尔转换为数字】
  9. true ->1
  10. false ->0
  11. 【把没有转换为数字】
  12. null ->0
  13. undefined ->NaN
  14. 【把引用类型值转换为数字】
  15. 首先都先转换为字符串(toString),然后再转换为数字(Number

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

1.发生的情况

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

2.转换规律

  1. //=>调用的方法:toString
  2. 【除了对象,都是你理解的转换结果】
  3. 1 ->'1'
  4. NaN ->'NaN'
  5. null ->'null'
  6. [] ->''
  7. [13] ->'13'
  8. [12,23] ->'12,23'
  9. ...
  10. 【对象】
  11. {name:'xxx'} ->'[object Object]'
  12. {} ->'[object Object]'
  13. 不管是啥样的普通对象,最后结果都一样

把其它值转换为布尔类型

1.发生的情况

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

2.转换的规律

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

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

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

思考题:

  1. 12+true+false+null+undefined+[]+'佳佳'+null+undefined+[]+true
  2. =>'NaN佳佳nullundefinedtrue'
  3. 12+true ->13
  4. 13+false ->13
  5. 13+null ->13
  6. 13+undefined ->NaN
  7. NaN+[] ->'NaN'
  8. 'NaN'+'佳佳' ->'NaN佳佳'
  9. ...
  10. 'NaN佳佳rueundefined'
  11. 'NaN佳佳trueundefined'+[] ->'NaN佳佳trueundefined'
  12. ...
  13. =>'NaN佳佳trueundefinedtrue'

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

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

  1. {name:'xxx'}=={name:'xxx'} =>false
  2. []==[] =>false
  3. var obj1={};
  4. var obj2=obj1;
  5. obj1==obj2 =>true

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

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

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

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

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

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

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

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

nullundefined:true

null=undefined:false

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

NaN==NaN:false

NaN和谁都不相等包括自己

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

  1. 1==true =>true
  2. 1==false =>false
  3. 2==true =>false 规律不要混淆,这里是把true变为数字1 //未掌握
  4. []==truefalse 都转换为数字 0==1
  5. ![]==truefalse
  6. []==falsetrue 都转换为数字 0==0
  7. ![]==falsetrue 先算![],把数组转换为布尔取反=>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. python 38 线程队列与协程

    目录 1. 线程队列 1.1 先进先出(FIFO) 1.2 后进先出(LIFO)堆栈 1.3 优先级队列 2. 事件event 3. 协程 4. Greenlet 模块 5. Gevent模块 1. ...

  2. python学习——高阶函数

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.使用递归函数的优点是逻辑简单清晰,缺点就是过深的调用会导致栈溢出.但是针对尾递归优化的语言可以通过尾递归防 ...

  3. Leetcode之回溯法专题-17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    [Leetcode]17. 电话号码的字母组合(Letter Combinations of a Phone Number) 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组 ...

  4. 【StyleCop】StyleCop规则汇总

    所有规则的翻译(基于版本4.7.44.0): 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustB ...

  5. JMeter更改语言为英文

    1. 进入目录apache-jmeter-2.13\bin 2. 打开jmeter.properties 3. 取消“language=en”前的注释 4. 重新打开JMeter,即可看到语言已经变成 ...

  6. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治

    1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...

  7. CF989C A Mist of Florescence 构造 思维好题 第八题

    A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. x86_64 Linux 运行时栈的字节对齐

    前言 C语言的过程调用机制(即函数之间的调用)的一个关键特性(起始大多数编程语言也是如此)都是使用了栈数据结构提供的后进先出的内存管理原则.每一个函数的栈空间被称为栈帧,一个栈帧上包含了保存的寄存器. ...

  9. hbase读取快照数据-lzo压缩遇到的问题

    1.读取hbase快照数据时报UnsatisfiedLinkError: no gplcompression in java.library.path错: 2019-09-04 17:36:07,44 ...

  10. ImageView的功能和使用

    ImageView继承自View类,它的功能用于显示图片, 或者显示Drawable对象 xml属性: src和background区别 参考:http://hi.baidu.com/sunboy_2 ...