javascript不同类型数据之间的运算的转换方法


Posted in Javascript onFebruary 13, 2014

js中不同类型的基础数据之间可以转换,这种转换是有规则可寻的,并非随意的随机的。在js中有5种基础类型数据:string、number、boolean、null、undefined,其中,常用于计算或者比较的类型是前面三种。

基础数据之间的转换

其它类型转化数字
原始数据类型 目标类型Number
undefined NaN
null 0
false 0
true 1
数字串 相应的数字
不能转化的字符串 NaN
其它类型转化为字符串
原始数据类型 目标类型String
undefined undefined
null null
false false
true true
数字 数字字符串

 

不同类型的基础数据之间的加法,数据先转换为number,然后转换为string(如果有string类型数据参与运算)

null + undefined // 0+NaN null + false // 0+0 
1 + true // 1+1 
1 + '1' //'11';数字与字符串相加结果是字符串 
1 + 2 + '3'  //'33';(1+2)的结果然后与'3'相加;这里要把每一步加法单独拆开来看,否则变成和下面一样的结果了. 
1 + (2 +'3') //'123';先运算2+'3',然后1+'23' 
's' + null //'snull' 
's' + undefined // 'sundefined' 
's' + true //'strue' 
1 + true + undefined + 's' // 1+1+NaN+'s'=2+NaN+'s'=NaN+'s'=NaNs

对象参与加减法运算

对象参与基础类型数据运算,先转化为基础类型。先调用其valueOf方法,如果返回的不是基础类型,再调用其toString方法,如果返回的还不是基础类型,则抛出错误。但是,Date数据刚好相反

//为了便于观察重写Date的toString方法和valueOf方法 Date.prototype.toString = function(){ 
    return 1; 
} 
Date.prototype.valueOf = function(){ 
    return 2; 
} 
var a = new Date, 
    b = new Date; 
a + b; // 调用toString,1 + 1,结果是2 
// 再重写toString方法 
Date.prototype.toString = function(){ 
    return {}; 
} 
var c = new Date, 
    d = new Date; 
c + d; // 调用toString方法返回的不是基础类型,再调用valueOf,2 + 2,结果是4 
// 再重写valueOf方法 
Date.prototype.valueOf = function(){ 
    return {}; 
} 
var e = new Date, 
    f = new Date; 
e + f; // 报错

把上面的例子换成Object或者其他类型能得到相应的结果,不过是先调用valueOf,再调用toString。

'+'号的神奇功效

数据前有加号‘+',可以让字符串转化为数字

+'1'+1 // 2 +'s'+2 // NaN

注:第一次,格式不好,纰漏多,欢迎大家拍砖
Javascript 相关文章推荐
一个对于Array的简单扩展
Oct 03 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
Javascript函数的参数
Jul 16 Javascript
AngularJS Toaster使用详解
Feb 24 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
vue中touch和click共存的解决方式
Jul 28 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 13 Javascript
js清理Word格式示例代码
Feb 13 #Javascript
Js与下拉列表处理问题解决
Feb 13 #Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 #Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 #Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 #Javascript
jquery清空表单数据示例分享
Feb 13 #Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 #Javascript
You might like
人族 Terran 基本策略
2020/03/14 星际争霸
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
php之readdir函数用法实例
2014/11/13 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
python 装饰器重要在哪
2021/02/14 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
网吧消防安全制度
2014/01/28 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
雷锋观后感
2015/06/10 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
导游词之无锡梅园
2019/11/28 职场文书