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实现点击链接弹出"图片另存为"而不是直接打开
Aug 15 Javascript
基于JQuery的cookie插件
Apr 07 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
JavaScript中的acos()方法使用详解
Jun 14 Javascript
深入探讨前端框架react
Dec 09 Javascript
JavaScript实现的商品抢购倒计时功能示例
Apr 17 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 Javascript
详解vue或uni-app的跨域问题解决方案
Feb 21 Javascript
详解CocosCreator项目结构机制
Apr 14 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中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
微信支付开发维权通知实例
2016/07/12 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
python在命令行下使用google翻译(带语音)
2014/01/16 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
详解Python3中的 input() 函数
2020/03/18 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
不用游标的SQL语句有哪些
2012/09/07 面试题
十佳美德少年事迹材料
2014/02/05 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
《社戏》教学反思
2014/04/15 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
低碳环保演讲稿
2014/08/28 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
运动员代表致辞
2015/07/29 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript