详解Javascript数据类型的转换规则


Posted in Javascript onDecember 12, 2016

一、数据类型

5种基本数据类型:Null/Undefined/String/Boolean/Number

1种复杂数据类型:Object

二、数据类型检测

传送门《JS中检测数据类型的几种方式及优缺点小结》

1、typeof

2、instanceof/constructor

3、Object.prototype.toString.call(value)

4、Object.prototype.toString

三、数据类型转换

JS内部提供不同数据类型的自动转换机制,在某处预期为某种类型而不是某种类型时,就会自动转换为预期类型,这就是我们常说的隐式转换。

1、强制类型转换

在了解隐式转换的规则前先来看看强制类型转换,强制类型转换主要是用Boolean()/String()/Number()将各类型的数据转换成布尔、字符串、数值型数据。

Boolean() 函数

当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true。如果该值是空字符串、数字 0、undefined 或 null,它将返回 false。

var b1 = Boolean(""); //false - 空字符串
var b2 = Boolean("hello"); //true - 非空字符串
var b1 = Boolean(50); //true - 非零数字
var b1 = Boolean(null); //false - null
var b1 = Boolean(0); //false - 零
var b1 = Boolean(new object()); //true - 对象

Number() 函数

Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值。

parseInt() 和 parseFloat() 方法只转换第一个无效字符之前的字符串,因此 "1.2.3" 将分别被转换为 "1" 和 "1.2"。

用 Number() 进行强制类型转换,"1.2.3" 将返回 NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。

详解Javascript数据类型的转换规则

String() 函数

最后一种强制类型转换方法 String() 是最简单的,因为它可把任何值转换成字符串。

要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法,即把 12 转换成 "12",把 true 转换成 "true",把 false 转换成 "false",以此类推。

强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误:

var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //会引发错误

2、自动类型转换

说完了强制类型转换,再来看看自动类型转换,实际上自动类型转换是建立在强制类型转换的基础上,当预期某个位置应该是某类型(布尔、数值、字符串)的数据时,就会调用相应的强制类型转换函数,这个是自动进行的。

*当JavaScript遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。

因此除了以下六个值,其他都是自动转为true。

  • undefined
  • null
  • -0
  • 0或+0
  • NaN
  • ''(空字符串)

*当JavaScript遇到预期为字符串的地方,就会将非字符串的数据自动转为字符串。系统内部会自动调用String函数。

字符串的自动转换,主要发生在加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。

*当JavaScript遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number函数。

除了加法运算符有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。

一元运算符也会把运算子转成数值。

+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
理解Javascript_12_执行模型浅析
Oct 18 Javascript
window.location.hash 使用说明
Nov 08 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
学习JavaScript设计模式之模板方法模式
Jan 20 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
vue.js实例对象+组件树的详细介绍
Oct 20 Javascript
利用JS测试目标网站的打开响应速度
Dec 01 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
小程序如何构建骨架屏
May 29 Javascript
Vue基于localStorage存储信息代码实例
Nov 16 Javascript
设置jquery UI 控件的大小方法
Dec 12 #Javascript
JS中检测数据类型的几种方式及优缺点小结
Dec 12 #Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 #Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
Dec 12 #Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 #Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 #Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 #Javascript
You might like
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
python中二维阵列的变换实例
2014/10/09 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Django自定义manage命令实例代码
2018/02/11 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
车间主任岗位职责
2014/03/16 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
采购部长岗位职责
2014/06/13 职场文书
离婚协议书标准格式
2014/10/04 职场文书
检讨书1000字
2014/10/11 职场文书
运动会表扬稿
2015/01/16 职场文书
慰问信模板
2015/02/14 职场文书
团员年度个人总结
2015/02/26 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书