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 相关文章推荐
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
Jan 08 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
Jan 24 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
vue中的event bus非父子组件通信解析
Oct 27 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
node实现分片下载的示例代码
Oct 17 Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 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
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
php链表用法实例分析
2015/07/09 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
javascript从image转换为base64位编码的String
2014/07/29 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
服务理念口号
2014/06/11 职场文书
宣传活动总结范文
2014/07/01 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
银行竞聘报告范文
2014/11/06 职场文书
人事专员岗位职责
2015/02/03 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
工程技术员岗位职责
2015/04/11 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书