JavaScript显式数据类型转换详解


Posted in Javascript onMarch 18, 2019

基本概念

将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串、数字和布尔值,不会返回引用类型值。
类型转换分为“显式”和“隐式”:“显式”转换发生在静态类型语言的编译阶段,而“隐式”转换则发生在动态类型语言的运行时。

显式类型转换

非字符串到字符串的类型转换

toString() 方法
数字、布尔值、字符串和对象都有 toString() 方法,但 null 和 undefined 没有。
例子:

var name = "Tom",
  age = 19,
  isStudent = true;
console.log(name.toString()); //输出:"Tom"
console.log(age.toString()); //输出:"19"
console.log(isStudent.toString()); //输出:"true"

var obj = {
    name: "Tom"
  },
  arr = [19, 20];
console.log(obj.toString()); //输出:"[object Object]"
console.log(arr.toString()); //输出:"19,20"

*基本类型值不能直接使用 toString() 方法,所以 JavaScript 引擎会自动为基本类型值创建一个封装对象,然后对该对象调用 toString()。

String() 方法

这个方法能够将任何类型的值转换为字符串,基本的转换规则是:

1、如果值有toString()方法,则调用该方法进行转换;
2、如果值是null,则返回“null”;
3、如果值是undefined,则返回“undefined”。

例子:

console.log(String(11)); //输出:"11"
console.log(String(true)); //输出:"true"
console.log(String("love")); //输出:"love"
console.log(String(null)); //输出:"null"
console.log(String(undefined)); //输出:"undefined"
console.log(String({
  name: "Tom"
})); //输出:"[object Object]"
console.log(String([1, 2])); //输出:"1,2"

非数字到数字的类型转换

Number() 方法

这个方法可以用于任何数据类型,基本的转换规则是:
1、如果是Boolean值,true和false将分别被转换为1和0;
2、如果是数字值,只是简单的传入和返回;
3、如果是null值,返回0;
4、如果是undefined值,返回NaN;
5、如果是字符串,遵循下列规则:

  1. 如果字符串中只包含数字,将其转换为十进制。即“123”转换为123,“011”转换为11(忽略前导0);
  2. 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
  3. 如果字符串是空的,不包含任何字符,则将其转换为0;
  4. 如果字符串中包含除上述以外的字符,则将其转换为NaN。

 6、如果是对象,会首先检查该值是否有 valueOf() 方法。如果有,并且可以成功返回基本类型值,那么就使用该方法的返回值进行强制类型转换;如果没有就使用 toString() 的返回值来进行强制类型转换。如果 valueOf() 和 toString() 均不返回基本类型值,会产生 TypeError 错误。

*valueOf() 和 toString() 都属于 Object 的原型方法,valueOf() 返回类型不变的原始值而非值的字符串形式。

例子:

console.log(Number(true)); //输出:1
console.log(Number(10)); //输出:10
console.log(Number(null)); //输出:0
console.log(Number(undefined)); //输出:NaN
console.log(Number("123")); //输出:123
console.log(Number("01")); //输出:1
console.log(Number("1.1")); //输出:1.1
console.log(Number("")); //输出:0
console.log(Number("love")); //输出:NaN
//转换过程:{name: "Tom"} => "[object Object]" => NaN
console.log(Number({
  name: "Tom"
})); //输出:NaN
//转换过程:[1,2] => "1,2" => NaN
console.log(Number([1, 2])); //输出:NaN
//转换过程:[999] => "999" => 999
console.log(Number([999])); //输出:999
console.log(Number(new Date)); //以微秒为单位的数字时间

parseInt() 方法

这个方法是专门用于把字符串转换成整数的,非字符串参数会首先被强制转换为字符串,它的基本转换规则是:
1、如果第一个字符不是数字或者负号,返回NaN;
2、如果第一个字符是数字,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。
例子:

例子:

//非字符串类型
//转换过程:10.1 => "10.1" => 10
console.log(parseInt(10.1)); //输出:10
//转换过程:0.0000008 => "8e-7" => 8
console.log(parseInt(0.0000008)); //输出:8

//字符串类型
console.log(parseInt("10abc")); //输出:10
console.log(parseInt("abc")); //输出:NaN

*从 ES5 开始,parseInt() 默认转换为十进制数,如果需要转换其他基数(即多少进制),可以为这个函数提供第二个参数,例如:parseInt( “0xAF”, 16 ) 。

parseFloat() 方法与 parseInt() 类似,用于解析浮点数。字符串中的第一个小数点是有效的,而第二个小数点是无效的。除此之外,parseFloat() 方法只能解析十进制数。

例子:

console.log(parseFloat("10abc")); //输出:10
console.log(parseFloat("11.22.33")); //输出:11.22
console.log(parseFloat("011.22")); //输出:11.22

非布尔值到布尔值的类型转换

Boolean() 方法

可以对任何数据类型的值调用 Boolean() 方法,而且总会返回一个 Boolean 值,基本的转换规则是:
1、以下这些是可以被转换为 false 的值:

  1. undefined
  2. null
  3. false
  4. +0、-0 和 NaN
  5. “”

2、上面列举之外的值都是可以被转换为 true 的值。

例子:

console.log(Boolean(undefined)); //输出:false
console.log(Boolean(null)); //输出:false
console.log(Boolean(false)); //输出:false
console.log(Boolean(0)); //输出:false
console.log(Boolean(-0)); //输出:false
console.log(Boolean(NaN)); //输出:false
console.log(Boolean("")); //输出:false

所有的对象都是可以被转换为 true 的值,包括使用Boolean、 Number 和 String 来创建的基本包装类型的对象。

例子:

console.log(Boolean(new Boolean(false))); //输出:true
console.log(Boolean(new Number(0))); //输出:true
console.log(Boolean(new String(""))); //输出:true
console.log(Boolean([])); //输出:true
console.log(Boolean({})); //输出:true

如有错误,欢迎指正,本人不胜感激。

以上所述是小编给大家介绍的JavaScript显式数据类型转换详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
JavaScript基本语法学习教程
Jan 14 Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 Javascript
JS简单测试循环运行时间的方法
Sep 04 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
微信小程序实现星级评价效果
Dec 28 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
浅谈js中的bind
Mar 18 #Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 #Javascript
JavaScript中this用法学习笔记
Mar 17 #Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 #Javascript
微信小程序登录session的使用
Mar 17 #Javascript
Javascript读写cookie的实例源码
Mar 16 #Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 #Javascript
You might like
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js倒计时小程序
2013/11/05 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
python实现员工管理系统
2018/01/11 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
python中安装django模块的方法
2020/03/12 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
python中sys模块是做什么用的
2020/08/16 Python
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
采购文员岗位职责
2013/11/20 职场文书
平安工地汇报材料
2014/08/19 职场文书
公司环境卫生管理制度
2015/08/05 职场文书