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 相关文章推荐
Mozilla中显示textarea中选择的文字
Sep 07 Javascript
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
validator验证控件使用代码
Nov 23 Javascript
JS Replace()的高级使用方法介绍
Jun 29 Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 Javascript
全面解析Bootstrap手风琴效果
Apr 17 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
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错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
php实现插入排序
2015/03/29 PHP
3种php生成唯一id的方法
2015/11/23 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python中import机制详解
2017/11/14 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
python怎么删除缓存文件
2020/07/19 Python
Django URL参数Template反向解析
2020/11/24 Python
用python对excel查重
2020/12/07 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
幼儿园三八妇女节活动总结
2015/02/06 职场文书
出国导师推荐信
2015/03/25 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书