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 相关文章推荐
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
写出更好的JavaScript之undefined篇(上)
Nov 22 Javascript
json数据的列循环示例
Sep 06 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
基于jquery实现图片放大功能
May 07 Javascript
JS获取复选框的值,并传递到后台的实现方法
May 30 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
Sep 09 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
vue项目实现github在线预览功能
Jun 20 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 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
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
Vue实现简易计算器
2020/02/25 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
python3 下载网络图片代码实例
2019/08/27 Python
python实现图片素描效果
2020/09/26 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
财务工作个人求职的自我评价
2013/12/19 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
勇敢的心观后感
2015/06/09 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技