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 相关文章推荐
Javascript Global对象
Aug 13 Javascript
前端轻量级MVC框架CanJS详解
Sep 26 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
Mar 30 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
Node对CommonJS的模块规范
Nov 06 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 30 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
永不消失的title提示代码
2007/02/15 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
Python协程的用法和例子详解
2017/09/09 Python
python交互式图形编程实例(三)
2017/11/17 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
详解python播放音频的三种方法
2019/09/23 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
什么是索引指示器
2012/08/20 面试题
青年教师典范事迹材料
2014/01/31 职场文书
开学寄语大全
2014/04/08 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
签约仪式致辞
2015/07/30 职场文书