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 相关文章推荐
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
Jul 08 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
jQuery移动web开发中的页面初始化与加载事件
Dec 03 Javascript
浅谈ES6 模板字符串的具体使用方法
Nov 07 Javascript
浅谈js获取ModelAndView值的问题
Mar 28 Javascript
webpack4 处理SCSS的方法示例
Sep 03 Javascript
vue实现节点增删改功能
Sep 26 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
Jul 22 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
python字典多条件排序方法实例
2014/06/30 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Pandas的Apply函数具体使用
2020/07/21 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
前台接待员岗位职责
2014/01/02 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
工程负责人任命书
2014/06/06 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
奖金申请报告模板
2015/05/15 职场文书
信用卡工作证明范本
2015/06/19 职场文书
教导处教学工作总结
2015/08/12 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
PHP使用非对称加密算法RSA
2021/04/21 PHP
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技