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 页面计时器示例代码
Oct 28 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
Mar 02 Javascript
jquery ajax 如何向jsp提交表单数据
Aug 23 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
Dec 30 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
js中作用域的实例解析
Mar 16 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
详解Chart.js轻量级图表库的使用经验
May 22 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中for循环语句的几种变型
2006/11/26 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
js实现随机数小游戏
2019/06/28 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python3正则模块re的使用方法详解
2020/02/11 Python
python元组拆包实现方法
2021/02/28 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
四年级数学教学反思
2014/02/02 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
陕西导游词
2015/02/04 职场文书
初中毕业感言300字
2015/07/31 职场文书
企业财务管理制度范本
2015/08/04 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
Python anaconda安装库命令详解
2021/10/16 Python
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android