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 相关文章推荐
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
Oct 25 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
js实现拖拽效果
Feb 12 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
Vue.directive 自定义指令的问题小结
Mar 04 Javascript
在react中使用vuex的示例代码
Jul 30 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
Oct 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脚本[带参数]的方法
2010/01/22 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
javascript实现2048游戏示例
2014/05/04 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
详解Vue方法与事件
2017/03/09 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
Javascript地址引用代码实例解析
2020/02/25 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
数据库基础的一些面试题
2012/02/25 面试题
2014年小班元旦活动方案
2014/02/16 职场文书
《颐和园》教学反思
2014/02/26 职场文书
活动总结范文
2014/08/30 职场文书
自主招生英文自荐信
2015/03/25 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS