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 写类方式之一
Jul 05 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
uploadify多文件上传参数设置技巧
Nov 16 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
原生js中ajax访问的实例详解
Sep 19 Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
PHP打印输出函数汇总
2016/08/28 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python实现画循环圆
2019/11/23 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
毕业生的自我鉴定
2013/10/29 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
毕业证委托书范文
2014/09/26 职场文书
2015年手术室工作总结
2015/05/11 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript