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 30 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
Oct 23 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
May 24 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
vue中使用input[type="file"]实现文件上传功能
Sep 10 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 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公用函数列表[正则]
2007/02/22 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
python中异常捕获方法详解
2017/03/03 Python
Python实现注册、登录小程序功能
2018/09/21 Python
wxpython绘制音频效果
2019/11/18 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Django xadmin安装及使用详解
2020/10/26 Python
python制作微博图片爬取工具
2021/01/16 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
大跃进口号
2014/06/16 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
golang 实现Location跳转方式
2021/05/02 Golang
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
详解MySQL集群搭建
2021/05/26 MySQL
Java异常处理try catch的基本用法
2021/12/06 Java/Android