详解Js加法运算符
简介
JavaScript是一门了不起的语言。我喜欢它的灵活性:只需以你喜欢的方式做事:更改变量类型,动态的向对象添加方法或属性,对不同的变量类型使用运算符等等。
然而动态是要付出代价的,开发人员需要知道怎样处理对于不同操作符的类型转换:加号(+),等号(和=),不等号(!=和!==)等等,许多运算符有自己处理类型转换的方式。
加法运算符
最常用的运算符:+,这个运算符用于接连字符串或对数字求和:
字符串连接:
var result = "Hello, " + "World!";
// 字符串 + 字符串 = 字符串 (连接)
// "Hello, World!"
数字算术相加:
var result = 10 + 5;
// 数字 + 数字 = 数字 (相加)
// 15
JavaScript允许使用对象,数组,null或undefined作为操作数。下面试着揭开转换的一般规则。
转换规则
使用下面的等式看一下在操作运算符里JavaScript是如何进行类型转换的:
如果至少有一个操作数是对象,会被转换成原始值(字符串,数字或布尔);
转换之后,如果至少有一个操作数是字符串类型,第二个操作数会被转换成字符串,并且会执行连接。
在其他的情况下,两个操作数都会转换成数字并执行算数加法运算。
如果两个操作数都是原始类型,运算符会检查是否至少有一个是字符串类型,如果是就执行连接操作。其他情况就都转换为数字并求合。
对象类型转为原始类型
对象类型向原始类型的转换
如果对象类型是Date,会调用该对象的toString();
其他情况下,如果valueOf()返回的是原始类型,会调用对象的valueOf();
其他情况下(如果valueOf()不存在或没有返回原始类型),会调用toString()方法,大部分情况下是用的这种转换。
当数组转换为原始类型,JavaScript会使用它的join(',')方法,例如[1,5,6]就是"1,5,6"。普通JavaScript对像{}的原始类型是"[object Object]"。
资源搜索网站大全 https://www.renrenfan.com.cn 广州VI设计公司https://www.houdianzi.com
学习例子
下面的例子帮助我们理解简单和复杂的转换场景。
例1:数字和字符串
var result = 1 + "5"; // "15"
解析:
1+"5"(第二个操作数是字符串,基于规则2数字1变"1")
"1"+"5"(字符串连接)
"15"
第二个操作数是字符串,第一个操作数从数字转换为字符串,然后进行连接。
例2:数字和数组
var result = [1, 3, 5] + 1; //"1,3,51"
解析:
[1, 3, 5] + 1 (使用规则1,将数组[1, 3, 5]转换成原始值: "1,3,5")
"1,3,5" + 1 (使用规则,将数字1转换为字符串 "1")
"1,3,5" + "1" (字符串连接)
"1,3,51"
第1个操作数是数组,所以它被转换为原始字符串值,在下一步数字操作数转换为字符串,然后再完成两个字符串的连接。
例3:数字和布尔类型
var result = 10 + true; //11
解析:
10 + true (基于规则3将布尔值true转换成数字1)
10 + 1 (将两个数字求值)
11
因为两个操作数都不是字符串,布尔值转换成数字,然后执行算术的求和。
例4:数字和对象
var result = 15 + {}; // "15[object Object]"
解析:
"15 + {}" (第二操作数是个对象,应用规则1将对象转换为原始类型字符串"[object Object]")
15 + "[object Object]" (使用规则2将数字15转换成字符串 "15")
"15" + "[object Object]" (字符串连接)
"15[object Object]"
第二个对象操作数转为字符串值,因为valueOf()方法返回对象本身,它不是原始值,toString() 方法就会被调用并返回字符串,第二个操作数现在是字符串了,因此数字也被转换为字符串,最后执行两个字符串的连接。
例5: 数字和null
var result = 8 + null; // 8
解析:
8 + null (因为两个操作数都不是字符串,基于规则3将null转为数字0)
8 + 0 (数字相加)
8
因为操作数不是对象也不是字符串,null被转换成数字,然后计算数字的和。
例6: 字符串和null
var result = "queen" + null; // "queennull"
解析:
"queen" + null (因为第一个操作数是字符串,基于规则2将null转成字符串"null")
"queen" + "null" (字符串连接)
"queennull"
因为第一个操作数是字符串,null转成字符串,然后进行字符串连接。
例7:数字和undefined
var result = 12 + undefined; // NaN
解析:
12 + undefined (因为操作数都不是对象或字符串,基于规则3将undefined转为数字NaN)
12 + NaN (数字相加)
NaN
因为操作数都不是对象或字符串,undefined转为数字:NaN,对数字和NaN进行相加求值等于NaN.
详解Js加法运算符的更多相关文章
- 详解js变量、作用域及内存
详解js变量.作用域及内存 来源:伯乐在线 作者:trigkit4 原文出处: trigkit4 基本类型值有:undefined,NUll,Boolean,Number和Strin ...
- [转]javascript console 函数详解 js开发调试的利器
javascript console 函数详解 js开发调试的利器 分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...
- 详解js和jquery里的this关键字
详解js和jquery里的this关键字 js中的this 我们要记住:this永远指向函数运行时所在的对象!而不是函数被创建时所在的对象.this对象是在运行时基于函数的执行环境绑定的,在全局环境中 ...
- 详解js的bind、call、apply
详解js的bind.call.apply 说明 虽然bind.call.apply都是js很基础的一块知识,但是我从未认真总结过这三者的区别. 由于公司后端是用的微服务架构,又没有中间层对接,导致前端 ...
- 详解js面向对象编程
转自:http://segmentfault.com/a/1190000000713346 基本概念 ECMA关于对象的定义是:”无序属性的集合,其属性可以包含基本值.对象或者函数.“对象的每个属性或 ...
- 详解js中的闭包
前言 在js中,闭包是一个很重要又相当不容易完全理解的要点,网上关于讲解闭包的文章非常多,但是并不是非常容易读懂,在这里以<javascript高级程序设计>里面的理论为基础.用拆分的方式 ...
- Jquery 选择器 详解 js 判断字符串是否包含另外一个字符串
Jquery 选择器 详解 在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jquery 各种在线工具地址:http://www.ostools ...
- 详解JS设计模式
原文链接:www.cnblogs.com 一:理解工厂模式 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式. 简单的工厂模式可以理解为解决 ...
- 详解JS对象
[自定义对象] 1.基本概念 ①对象是包含一系列无序属性和方法的集合: ②键值对:对象中的数据是以键值对的形式存在的,以键取 ...
随机推荐
- ASP.Net Core 3.1 使用gRPC入门指南
主要参考文章微软官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/grpc/client?view=aspnetcore-3.1 此外还参考了文章 ...
- 2020.10.17 JZOJ 提高B组T2 导弹拦截
2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...
- python初次接触
1.python有什么用或者能做什么? 可以做网站(比如 YouTube.豆瓣),可以做图片处理,可以做科学计算,也可以爬虫,甚至于游戏,学好Python后不用担心没有用武之地,Google就大量的在 ...
- NFS服务配置总结
目录 介绍 原理 适用场景 安装 NFS服务端 NFS客户端 配置 服务端配置 客户端配置 介绍 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不 ...
- PyQt(Python+Qt)学习随笔:QTabWidget部件信号简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTabWidget自身提供的信号包括如下: currentChanged(int index):每 ...
- 推荐系统实践 0x0c FM系列
逻辑回归(LR) 在介绍FM系列之前,我想首先简单介绍一下逻辑回归.通常来说,逻辑回归模型能够综合利用更多的信息,如用户.物品.上下文等多种不同的特征,生成更为全面的结果.另外,逻辑回归将推荐问题看成 ...
- Day3 Scrum 冲刺博客
·线上会议: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 纪昂学 创建一个Cell类,用来表示一个小方块 就创建一个Tetr ...
- 【学习笔记】浅析后缀自动机(SAM)及基础应用
解决子串相关问题的强大工具 我们知道一个长度为 \(n\) 的字符串中所有的子串数目为 \(O(n^2)\) 个,这很大程度上限制了我们对某些子串相关问题的研究.所以有没有解决方案,使得我们可以在可承 ...
- 【HNOI2010】城市建设(对时间分治 & Kruskal)
Description \(n\) 个点 \(m\) 条边的带边权无向图.\(q\) 次操作,每次修改一条边的权值. 求每次修改后的最小生成树的边权和. Hint \(1\le n\le 2\time ...
- 服务启动Apache服务,错误Parent: child process exited with status 3 -- Aborting.解决
不能启动apache,或者使用wamp等集成包后,唯独apache服务启动后有停止,但是把东西搬到其他机器上却没事问题可能和网络有关,我查了很多资料首先找打apache的错误报告日志,发现现实诸多的调 ...