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 相关文章推荐
在Javascript中定义对象类别
Dec 22 Javascript
javascript 函数调用的对象和方法
Jul 01 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 Javascript
jquery的live使用注意事项
Feb 18 Javascript
jQuery.trim() 函数及trim()用法详解
Oct 26 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
Angular项目如何升级至Angular6步骤全纪录
Sep 03 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 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
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Python性能提升之延迟初始化
2016/12/04 Python
Python Flask-web表单使用详解
2017/11/18 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
python读写csv文件方法详细总结
2019/07/05 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
实习评语
2013/12/16 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
英语教师自荐信
2014/05/26 职场文书
新农村建设典型材料
2014/05/31 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
工作所在部门证明
2014/09/21 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python