JavaScript数据类型大体分为两类:primitive和object,primitive包括:string,boolean,number,undefined,null;object包括:object,array,function。

JavaScript在期待某种类型的地方,而该地方的数据类型是其他的类型的时候,JavaScript会自动地进行类型的转换,比如在if条件判断中,条件表达式需要一个boolean类型,但是条件表达式的结果为undefined,数字等等的时候,JavaScript会把这些数据转换成boolean,然后判断。如:

var x=5;

if(x){//x是个数字,值等于5,但是if需要的是boolean,所以把5转成boolean,为true,条件里的代码得以执行。

}

下面讲解下,不同数据类型之间的转换规则:

一、primitive到primitive转换

1、string转换到boolean:空字符串转换后为false,其他所有的字符串转换后都为true

2、string转换到number:可以解析成一个数值的字符串可以转换成对应的数值,并且忽略首尾的空格。如果首尾是非空格字符,转换成数字后为NaN。

3、boolean转换为string:true:"true",false:"false"

4、boolean转换为number:true:1,false:0

5、number转换为string:0:"0",-0:"0",Infinity:"Infinity",-Infinity:"-Infinity",NaN:"NaN",12:"12"

6、number转换为boolean:0,-0,NaN:false,其他所有的number都为true

7、undefined转换为string:"undefined"

8、undefined转换为boolean:false;

9、undefined转换为number:NaN

10、null转换为string:"null"

11、null转换为boolean:false

12、null转换为number:0

二、primitive到Object转换:

1、string,boolean,number转成Object,是相应的转换成其对应的包装类型:String,Boolean,Number

2、null,undefined不能转换成Object,强转的话,报TypeError错误。

三、Object到primitive转换:

1、Object到boolean的转换:所有的Object转换后都为true,包括array,function。也包括Boolean(false)。

Object到number和string的转换,是通过调用他们对应的对象上的方法来实现的。JavaScript的对象上有两个方法来执行转换,一个是toString(),一个是valueOf().所有的对象都继承了这两个方法。

toString()方法是返回对象的字符串表示形式,该方法默认返回的是一个没有特别意义的字符串,但是Array,Date,RegExp,Function对该方法进行了特别的定义,返回的字符串有相应的意义。

valueOf()方法执行的任务没有很好地定义,如果对象存在对应的原始类型,它应该是返回该对象对应的原始数据类型,但是对象是复合类型,一般不存在一个单一的原始类型与之对应。所以默认该方法返回的是这个对象本身,而不是一个原始类型。但是包装类(Number,Boolean,String)的这个方法返回的是其包装的原始类型,Array,Function,RegExp继承默认的方法。Date的这个方法返回的是该时间距离1970.1.1所经历的时间间隔,以毫秒为单位。

解释了toString和valueOf方法,继续看看Object到number和string的转换。

2、Object到string的转换步骤:

a.如果对象存在toString方法,调用它,如果返回的是原始类型的值,JS把原始类型的值转成string(如果原始类型不是string类型才转),然后返回该值。

b.不存在toString方法或者返回值不是原始类型的话,检查是否存在valueOf方法,如果存在,调用它,如果返回的是原始类型的值,JS把原始类型的值转成string(如果原始类型不是string类型才转),然后返回该值。

c.通过这两个方法都无法获取一个原始类型值,抛出TypeError异常。

3、Object到number的转换步骤:(和string类似,只是先检查的是valueOf方法,然后是toString)

a.如果对象存在valueOf方法,调用它,如果返回的是原始类型的值,JS把原始类型的值转成number(如果原始类型不是number类型才转),然后返回该值。

b.检查是否存在toString方法,如果存在,调用它,如果返回的是原始类型的值,JS把原始类型的值转成number,然后返回该值。

c.通过这两个方法都无法获取一个原始类型值,抛出TypeError异常。

四、显示转换

前面三种都是隐式的自动转换,JavaScript也可以显示地进行类型转换,这是通过包装类进行的,比如:

Number("67");//字符转数值:67

String(false);//"false"

Boolean([]);//数组转boolean,值为true

Object(3);//new Number(3)

上面讲了不同类型之间的自动转换规则,那么在哪些条件下会引起或者说触发相应的转换呢?下面列出一些场景:

1、if,while等条件语句中,前面有例子。

2、不同数据类型进行运算的时候,比如:

"23"+5//二元运算符+(加)把数值5转成字符串,所以结果为"235"

+"23”+5//第一个一元运算符+(取正,注意和上例的区别) 把"23"字符串转成数值23,所以结果为28

"23"-true//二元运算符-(减)把其他类型转成数值型,所以结果为22

3、比较运算符的两边,数据类型不同时,可能会转换。

比如这四个表达式都为true:undefined==null,"0"==0,"0"==false,0==false

这是因为在进行比较前的时候,等号两边不同的数据类型会进行类型转换,转成相同类型(最终是何种类型,下面有规则说明)再比较(undefine和null例外,他们不转换,默认认为他们相等)。

但是需要注意的是,就算等号两边的类型可以转换,转换后的值也相等,并不意味着他们就真的相等。比如:undefined==false返回的是false,说明他们并不相等。

这是因为==两边的类型在转换的时候,永远不会被转换成boolean类型。那么到底转换的时候,遵循什么规则呢?

转载于:https://www.cnblogs.com/winson/p/3337372.html

JavaScript的类型转换相关推荐

  1. JavaScript数据类型转换

    JavaScript数据类型转换 1 转换为字符串类型 2 转换为数字型 3 转换为布尔型 4 计算年龄案例 1 转换为字符串类型 转换为字符串型的3种常见的方式: 1.利用"+" ...

  2. JavaScript强制类型转换(三)Boolean布尔值型

    JavaScript强制类型转换(三) 使用要点 Hello!这里依旧是万物之恋.今天给大家带来的是js强制类型转换的第三篇,也是最后一篇博客.内容为将其它数据类型的数据转换为Boolean类型. 众 ...

  3. JavaScript强制类型转换(一)String字符串型

    JavaScript强制类型转换(一) 概念 将其他的数据类型转换作为String字符串型 方式一:调用toString()方法 方式二:调用String()函数 方式三:拼接字符串 概念 类型转换主 ...

  4. JavaScript强制类型转换(二)Number数值型

    JavaScript强制类型转换(二) 方式一:调用 Number()函数 String字符串 Boolean值 null和undefined 方式二:调用parseInt()函数 使用要点 局限性 ...

  5. JavaScript 数据类型转换

    1. typeof 操作符 使用typeof操作符来检测变量的数据类型. 使用方式:typeof 变量名 或者 typeof(变量名) 返回结果: number.string.boolean.obje ...

  6. javascript object 转换int_关于javascript 中类型转换那些事你知道吗?

    在学习<关于类型,有哪些你不知道的细节>一章节中,讲到了javascript内置了Symbol.toPrimitive属性,可自定义类型转换操作. typeof 我们最常使用typeof来 ...

  7. Javascript 强制类型转换函数

    1. Boolean(value):把值转换成Boolean类型: 2. Nnumber(value):把值转换成数字(整型或浮点数): 3. String(value):把值转换成字符串. 我们先来 ...

  8. JavaScript原始类型转换和进制转换

    1.JavaScript转换包括:强制转换和基本转换 如: var  str = 'A',num=10,nu=null,t=true,und=undefined,x; //注意:定义的x未被初始化:默 ...

  9. javascript 强制类型转换

    来源:http://www.diybl.com/course/1_web/javascript/jsjs/2007114/83289.html 强制类型转换      使用强制类型转换(type ca ...

  10. JavaScript的类型转换(字符转数字,数字转字符)

    在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使 ...

最新文章

  1. 5G NGC — 关键技术 — 网络切片 — 概述
  2. # 管道已结束_CIPP内衬紫外线固化法用于污水管道非开挖修复
  3. mysql中sql命令大小写吗_sql语句大小写有关系吗?
  4. 常用的数据交换格式有哪些_大数据架构之数据交换平台
  5. 安卓学习 之 网络技术(十)
  6. 17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告
  7. python的进程和线程_Python进程与线程知识
  8. 学习dubbo(四): 启动时检查
  9. dubbo源码解析-spi(四)
  10. DS18B20温度传感器-51单片机控制程序
  11. 06_JavaEE回顾笔记Ⅱ
  12. html css js实现快递单打印_Node.js开发RPA自动抓取网页的文字内容
  13. SpringBoot数据库密码动态配置
  14. 打开word2007总是出现配置进度_最新版斑马进度计划软件更新了哪些功能?一起来探索 !...
  15. Proteus仿真工程文件打不开
  16. 网络基础服务器 与SMP、NUMA、MPP 三大体系结构科普
  17. Google Chrome 试用感受
  18. Promodel®模拟和优化套装加速企业绩效改善 功能介绍
  19. 七牛云彭垚:智能平台的创新和发展
  20. 新近起病的活动性RA患者中达标治疗与常规治疗的疗效比较:来自GUEPARD试验和ESPOIR队列的数据...

热门文章

  1. Twitterrifi常用快捷键汇总
  2. 「AtCoder Grand018A」Getting Difference(GCD)
  3. 数字证书(Certificate)
  4. ubuntu文件编码转换
  5. IOS恢复备份使用帮助
  6. 非科班前端人的一道送命题:0.1+0.2 等于 0.3 吗?
  7. 今天来了一位妹纸面试,我问她:线程池中多余的线程是如何回收的?她有点懵~...
  8. 三天两夜肝完这篇万字长文,终于拿下了 TCP/IP
  9. “12306”是如何支撑百万QPS的?
  10. 漫画:“架构师”小赵的故事