javascript不同类型数据之间的运算是如何转换的
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不同类型数据之间的运算是如何转换的的更多相关文章
- Qt中不同类型数据之间的相互转换
int类型转换为QString类型 ; QString string_data; string_data = QString::number(int_data,);//10进制 qDebug() &l ...
- 基本数据类型,包装类型,String类型数据之间的转换
java中所有的类都从java.lang.Object类派生而来,在java语言中,除基本数据类型以外,基本数据类型有java类库体统了包装类:Integer类保存整形变量,Boolean类保存布尔变 ...
- java不同基本类型之间的运算
一.不同基本类型在JAVA中,基本类型(除了boolean外)可以自动转换的,转换形式为:byte,short,char – int --long–float–double这就是自动转换的顺序了,其中 ...
- PHP-----JSOM类型数据
JS里的数据类型 JS里的一种数据类型,JSOM类型数据 JSOM这种数据类型,在使用JS和jquery时经常使用的到,比较重要.用起来比较简单. <title>无标题文档</tit ...
- 可变与不可变类型数据,列表的copy方法
我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) 接着我们通过一个实例来看一看可变与不可变类型数 ...
- (工具类)double类型数据运算
package com.flf.util;import java.math.BigDecimal;/** * double类型数据运算 * @author Yancy 2016-12-14 * */p ...
- javascript 操作符类型隐性转换
javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...
- 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据
第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...
- json进阶(一)js读取解析JSON类型数据
js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...
随机推荐
- mysql 5.7之后版本datatime 不允许设置 0000-00-00 00:00:00 的问题
打开mysql.ini配置文件 在mysqld下 加入sql-model验证规则即可 sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FO ...
- set_exception_handler 自定义异常处理
该函数用于创建运行时期间的用户自己的异常处理方法. set_exception_handler(error_function) 参数 必需.规定未捕获的异常发生时调用的函数. 该函数必须在调用 set ...
- html5:article与section元素
article元素 aiticle元素代表文档.页面或应用程序中独立的.完整的.可以肚子被外部引用的内容.它可以使一片博客或报刊中的文章.帖子. 一个article元素 ...
- jQuery中的append()和prepend(),after()和before()的差别
jQuery中的append()和preappend(),after()和before()的差别 append()和prepend() 如果 <div class='a'> //<- ...
- struts 简单前台用户名校验
一个jsp <?xml version="1.0" encoding="GB18030" ?> <%@ page language=" ...
- iOS百度地图
一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...
- TimesTen 应用层数据库缓存学习:4. 仅仅读缓存
在运行本文样例前.首先先运行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作. Read-only Cache Group的概念 仅仅读缓存组例如以下图: 仅仅读缓存组(Read-Onl ...
- oracle 查询 函数练习2
/*以下代码是对emp表/dept表/salgrade表进行显示宽度设置 */col empno for 9999;col ename for a10;col job for a10;col mgr ...
- DevExpress SpinEdit控件使用实例——删除ASPxSpinEdit右边的上下小箭头SpinButtons-ShowIncrementButtons
使用ASPxSpinEdit来添加数字类型的输入框: 默认情况下, SpinEdit通过点击右边的上下箭头来加减number,下面的代码是去掉上下箭头,内容居中显示,并将边框颜色置为白色: <d ...
- PHP连接Azure Redis
概述 Azure Redis缓存基于流行的开源Redis缓存,可以通过各种Redis客户端进行访问,这些客户端适用于许多编程语言.每个客户端有自身的API,用于通过Redis命令调用Redis缓存实例 ...