JavaScript中的值类型转换介绍


Posted in Javascript onDecember 31, 2014

在JavaScript中进行+、-、*、/、==、!=等运算时,如果操作符左右两边的值类型与预期类型不一致,JavaScript会将操作符两边的值转换成预期的类型后再进行操作。预期值类型为string时,JavaScript会将值转换为string;预期值类型为number时,JavaScript会将值转换为number (如果无法转换为数值,则返回NaN)比如:

 

console.log(10 + " cats");//10 cats

console.log(10 * " cats");//NaN, " cats" will be converted to NaN

console.log(10 + "2");//102

console.log(10 - "2");//8

console.log(10 / "2");//5

console.log(10 * "2");//20

console.log(10 * " 2");//20

console.log("10" * "2");//20

值类型转换规则

JavaScript中的值转换规则可以参考“JavaScript ? The Definitive Guide”一书中的Table 3-2. JavaScript type conversions。比较值得注意的一些地方是:

1.undefined转换成number后结果为NaN。
2.null转换成number后结果为0。
3.空字符串”"转换成number后结果为0。
4.-0转换成string后结果为”0″。
5.空数组[]转换成number后结果为0。
6.仅有一个number成员的数组(如[9])转换成number后结果为该numer值(9)。

当JavaScript将string转换成number时,有两个比较有趣的规则:

1.JavaScript会将字符串开头和结尾处的空白字符删除后再进行转换,因此像” 42 “这样的字符串可以顺利的被转换成数字42。

2.删除开头和结尾处的空白字符后,如果字符串中依然包含非数字字符,那么该字符串会被转换成NaN。比如:”3 m”就会被转换成NaN。

实例:

console.log(10 * " 3 ");//30

console.log(10 * "3 m");//NaN, "3 m" will be converted to NaN

值类型转换与比较

在JavaScript中,等于操作符(==)的使用会涉及到值类型转换:如果==操作符两边的值类型不一致,那么JS会将它们转换成一致的类型后再加以判断。需要小心的是,两个不同类型的值,经过类型转换后也许可以等价,但这并不意味着对它们使用==操作符的结果就一定为true。一个简单的例子是undefined和false:将undefined转换成boolean类型后结果刚好为false,但事实上undefined==false的结果却为false。

显式类型转换

使用JavaScript的类型自动转换非常便捷,但同时也很容易带来诸如代码可维护性等问题。为了使程序代码更加清晰、减少歧义,有时会在JS程序中使用显式类型转换:

Number("3")//3

String(false)//"false"

Boolean([])//true

大多数情况下,显式类型转换的结果与JS自动类型转换的结果是一致的;但存在1个特例:当将null或者undefined自动转换成Object时,JS将抛出TypeError错误;但当显式地将null或者undefined转换成Object时,JS将返回一个空的对象:
console.log(Object(undefined));//empty object

console.log(Object(null));//empty object

同时,如果显式转换所指定的类型与JS自动转换所指定的类型不一样,那么,得到的结果也不一样。比如之前所提及的undefined==false结果为false;如果显式指定转换类型为Boolean,那么得到的结果就为true了:
console.log(undefined == false);//false

console.log(Boolean(undefined) == Boolean(false));//true

对类型自动转换的使用

在JS中,可以使用值类型的自动转换,通过操作符来达到和显式转换一样的效果,比如:

console.log(false + "");//"false"

console.log(+false);//0

console.log(!!3);//true
Javascript 相关文章推荐
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
js读取cookie方法总结
Oct 31 Javascript
JS继承用法实例分析
Feb 05 Javascript
JS提交form表单实例分析
Dec 10 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
Javascript动画效果(2)
Oct 11 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
Jan 19 Javascript
jQuery代码实现实时获取时间
Jan 29 Javascript
JavaScript数据结构中串的表示与应用实例
Apr 12 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
微信小程序实现聊天室
Aug 21 Javascript
javascript实现滑动解锁功能
Dec 31 #Javascript
JavaScript中number转换成string介绍
Dec 31 #Javascript
JavaScript中string转换成number介绍
Dec 31 #Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 #Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 #Javascript
javascript 事件处理示例分享
Dec 31 #Javascript
JavaScript中的变量作用域介绍
Dec 31 #Javascript
You might like
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python生成随机密码的方法
2017/06/16 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
Pandas的Apply函数具体使用
2020/07/21 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
董事长新年致辞
2015/07/29 职场文书
2019消防宣传标语!
2019/07/10 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
Python实现打乒乓小游戏
2021/09/25 Python
python中redis包操作数据库的教程
2022/04/19 Python