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 相关文章推荐
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
Javascript优化技巧之短路表达式详细介绍
Mar 27 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
js表单序列化判断空值的实例
Sep 22 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
Node 升级到最新稳定版的方法分享
May 17 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 Javascript
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python语言描述随机梯度下降法
2018/01/04 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
银行存款证明样本
2014/01/17 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
爱我中华教学反思
2014/04/28 职场文书
团队精神口号
2014/06/06 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书