1、定义

  在了解运算符重载之前,先了解一下重载重载是指可使函数、运算符等处理不同类型数据或者接受不同个数参数的一种方法。
  函数重载是指函数名相同,函数参数个数或者参数类型不同,以至于返回类型可异同。
  运算符重载是指对已有得运算符重新定义,赋予其另一种功能,以达到适应不同数据类型得目的。

2、JS中运算符重载

2.1 加法运算符

  JS运算符中,加法运算符自带重载功能,即运算的数据类型不同导致加法运算符产生的行为不同,如下:

// 数值+数值 结果为数值
1+1    // 2// 数值+BOOL值 结果为数值
1 + true // 2// BOOL值+BOOL值 结果为数值
true + true // 2// 数值+字符串 结果为字符串
1 + '1' // '11'
5 + 3 + '1' // '81'
5 + '1' + 3 // '513'//bool值+字符串 结果为字符串
false + '1'

  需要注意的是加法运算符会从左到右计算,每次计算对会进行一次重载,故而字符串位置不同得到的运算结果不同。

2.2 其他运算符重载

  对于对象之间的运算,通过重载我们可以让通用的运算符达到我们想要的结果,如对valueOf方法进行重载。举例如下:
当数值与对象之间进行计算时,通常无法直接运算,如下:

var obj = { p: 1 };
obj + 2 // "[object Object]2"

运算过程会如下:

1、先调用obj.valueOf()得到{ p: 1 }
2、由于{p:1}无法直接运算,故而调用toString()得到"[object Object]"
3、最后执行"[object Object]" + 2 得到"[object Object]2"

此时得到的结果不是我们预期结果,我们可以通过重载valueOf来改变运算结果,如下:

var obj = {p: 1,valueOf: function () {return this.p;}
};obj + 2 // 3

对于特殊功能的实现,重载一般能起到作用,但对于JS来讲,一般不建议改变对象原有的运算符。

JavaScript学习笔记:JS运算符重载相关推荐

  1. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...

  2. JavaScript学习笔记——JS基础0

    JavaScript的起源: JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证.所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则.比如:用户名的长度,密码的长度, ...

  3. javaScript学习笔记之运算符

    运算符 = 用于赋值.用于给 JavaScript 变量赋值. 运算符 + 用于加值.算术运算符 + 用于把值加起来. 下面展示了算术运算符及赋值运算符: <!DOCTYPE html> ...

  4. (C++学习笔记七)运算符重载

    九.运算符重载 1.Code : #include<iostream> using namespace std;//运算符重载的意义: //对已有的 运算符 重新进行定义,赋予其另一项功能 ...

  5. 菜鸟教程-Javascript学习笔记-JS函数之前

    教程连接是: https://www.runoob.com/js/js-tutorial.html DOM(一些操作页面元素的方法) BOM(一些操作浏览器的方法) ################# ...

  6. c++学习笔记之运算符重载

    1.重载运算符 void operator+(....)        //重载"+"运算符 (1)如果是成员函数形式,那么必须是非static (2)使用运算符必须重载,除了&q ...

  7. JavaScript学习笔记——JS基础9

    90邮件的正则 <!DOCTYPE html> <html><head><meta charset="utf-8"><titl ...

  8. 1. JavaScript学习笔记——JS基础

    1. JavaScript基础 1.1 语法 严格区分大小写 标识符,第一个字符可以是 $,建议使用小驼峰法, 保留字.关键字.true.false.null不能作为标识符 JavaScript是用U ...

  9. JavaScript学习笔记——JS错误处理

    JavaScript 错误 try 语句测试代码块的错误 catch 语句处理错误 throw 语句创建自定义错误 JavaScript抛出错误 当错误发生时,当事情出问题时,JavaScript 引 ...

  10. [Javascript学习笔记]JS变量不声明也能使用,直接天下无敌!

    认识变量 什么是变量 变量 变量的输入与输出 同时声明多个变量 声明变量特殊情况 变量命名规范 什么是变量 本质:变量是程序在内存中申请的一块用来存放数据的空间. 变量 变量的输入与输出 <!D ...

最新文章

  1. 数据结构和算法,到底有多重要?
  2. docker部署elasticsearch-+-Kibana(6-8)-+-SpringBoot-2-1-6
  3. 如何在Ruby中写入文件?
  4. 计算机网络技术与应用教程期末考试,2011大学计算机网络技术与应用教程客观题期末复习(含判断题,属于公共课程,使用)...
  5. boost::intrusive::function_hook用法的测试程序
  6. 【tenserflow】——数据类型以及常用属性
  7. 最简单快捷搭建私链步骤笔记
  8. 解决批处理命令执行完毕后自动关闭cmd窗口
  9. 百度地图服务器不显示本地运行,百度地图定位成功,但地图不显示
  10. 大数据分析技术未来发展会如何
  11. 服务器ldb文件可以删除,Access数据库锁死,出现.ldb文件解决办法
  12. 解决excel转pdf出现的折行问题
  13. 猫哥教你写爬虫 019--debug-作业
  14. 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
  15. ati自定义分辨率_真三7:猛将传自定义分辨率图文教程
  16. HTML5实时显示摄像头视频
  17. Cobalt Strike 反向连接多层内网
  18. 图解法求最优解的例题_简单的线性规划求最优解
  19. UserBehavior用户行为分析
  20. access DateAdd函数

热门文章

  1. 【教程】dropbox+droppages搭建静态网页
  2. ClickHouse调优(一)基本调优
  3. JedisSentinelPool 连接 master
  4. python -- 简单感受一下python的魅力
  5. 质数(素数)的几种求法
  6. 软件工程个人作业-软件案例分析
  7. mysql系统错误 111,无法连接到MySQL服务器错误111
  8. javascript操作css实现弹出对话框
  9. 【项目设计】高并发内存池
  10. 可以直接在QQ上直接提取图片的文字啦