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) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...
随机推荐
- 【算法导论C++代码】最大子数组
#define Inf 65535 #include <iostream> using namespace std; void FindMaxCrossingSubarray(int *A ...
- POJ 1511 链式前向星+SPFA
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const i ...
- MVP+Dagger2+Rxjava+Retrofit+GreenDao 开发的小应用,包括新闻、图片、视频3个大模块,代码封装良好
练习MVP架构开发的App,算是对自己学过的知识做一个总结,做了有一段时间,界面还算挺多的.代码量还是有的,里面做了大量封装,总体代码整理得非常干净,这个我已经尽力整理了. 不管是文件(java.xm ...
- ci框架(二)
自定义SQL语句 当提供的API满足不了我们对S ...
- 在笛卡尔坐标系上描绘函数2*x+Math.sqrt(5-x*x)及其共轭函数2*x-Math.sqrt(5-x*x)曲线
代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Ty ...
- Android 自定义数字加减器
该自定义View主要是实现一款效果不错的数字加减器的功能的,但是也可以自定义选择器的外观颜色等. 1.自定义View的布局(add_sub_view.xml) <?xml version=&qu ...
- 有些类库(node.js版)
做项目经常会用到好些类库,大的还好说,用的多了自然记住了名字.如express. 但也有些小而精湛的类库,不仅提供了良好的功能,本身的实现也值得研究.暂记于此. 1.web类 request 简 ...
- ant-design-pro Login 组件 实现 rules 验证
1.引入组件 // 引入 ant-design-pro import Login from 'ant-design-pro/lib/Login'; /** * UserName 账号 * Passwo ...
- hibernate session的load和get方法
@Test public void testLoad() { Session session = sessionFactory.getCurrentSession(); session ...
- Drupal与其它开源系统的整合
网上看到一篇介绍Drupal与phpbb整合的文章.浏览了一下,真心地不错.于是就想将与整合有关的文章做一个汇总,以备不时之需: Drupal7整合PHPBB论坛 Drupal 7 整合 Vanill ...