1. 数字,字符串,数组,布尔混合操作的几种情况3 * "3" //9
1 + "2" + 1 //121true + true //2
10 - true //9const foo = {valueOf: () => 2
}
3 + foo // 5
4 * foo // 8const bar = {toString: () => " promise is a boy :)"
}
1 + bar // "1 promise is a boy :)"4 * [] // 0
4 * [2] // 8
4 + [2] // "42"
4 + [1, 2] // "41,2"
4 * [1, 2] // NaN"string" ? 4 : 1 // 4
undefined ? 4 : 1 // 12. 数字和字符串3 * "3" // 3 * 3
3 * Number("3") // 3 * 3
Number("5") // 5Number("1.") // 1
Number("1.34") // 1.34
Number("0") // 0
Number("012") // 12Number("1,") // NaN
Number("1+1") // NaN
Number("1a") // NaN
Number("one") // NaN
Number("text") // NaN3. 相加操作// concatenation
1 + "2" // "12"
1 + "js" // "1js"// addition
1 + 2 // 3
1 + 2 + 1 // 4//addition, then concatenation
1 + 2 + "1" // "31"
(1 + 2) + "1" // "31"//concatenation all through
1 + "2" + 1 // "121"
(1 + "2") + 1 // "121"4.对象操作"name" + {} // "name[object Object]
const foo = {}
foo.toString() // [object Object]const baz = {toString: () => "I'm object baz"
}baz + "!" // "I'm object baz!"const foo = {toString: () => 4
}2 * foo // 8
2 / foo // 0.5
2 + foo // 6
"four" + foo // "four4"const baz = {toString: () => "four"
}2 * baz // NaN
2 + baz // 2fourconst bar = {toString: () => "2"
}2 + bar // "22"
2 * bar // 45. 数组[1,2,3].toString() // "1,2,3"
[1,2,3].join() // "1,2,3"
[].toString() // ""
[].join() // """me" + [1,2,3] // "me1,2,3"
4 + [1,2,3] // "41,2,3"
4 * [1,2,3] // NaN4 * [] // 0
4 / [2] // 2//similar to
4 * Number([].toString())
4 * Number("")
4 * 0//4 / Number([2].toString())
4 / Number("2")
4 / 26. 布尔和字符串
Number(true) // 1
Number(false) // 0
Number("") // 04 + true // 5
3 * false // 0
3 * "" // 0
3 + "" // "3"7. valueOf函数
const foo = {valueOf: () => 3
}3 + foo // 6
3 * foo // 9toString和valueOf同时定义,valueOf优先
const bar = {toString: () => 2,valueOf: () => 5
}"sa" + bar // "sa5"
3 * bar // 15
2 + bar // 7const two = new Number(2)two.valueOf() // 28.if条件
if (-1) // truthy
if ("0") // truthy
if ({}) // truthy尽量避免以下比较操作:
const counter = 2
if (counter)替换为:
if (counter === 2)
如果进行类型比较:
if (typeof counter === "number")9.NaN
NaN === NaN // falseconst notANumber = 3 * "a" // NaNnotANumber == notANumber // false
notANumber === notANumber // falseif (notANumber !== notANumber) // trueNumber.isNaN(NaN) // true
Number.isNaN("name") // falseisNaN("name") // true
isNaN("1") // falseconst coerceThenCheckNaN = (val) => {const coercedVal = Number(val)return coercedVal !== coercedVal ? true : false
}coerceThenCheckNaN("1a") // true
coerceThenCheckNaN("1") // false
coerceThenCheckNaN("as") // true
coerceThenCheckNaN(NaN) // true
coerceThenCheckNaN(10) // false

Javascript 从ES5到ES7 - 14 类型运算相关推荐

  1. JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6

    Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...

  2. JavaScript、ES5和ES6的介绍和区别

    JavaScript简介 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. JavaScript由三部分组成: ECMAScript(核心)+DOM ...

  3. JavaScript传参年月日格式日期自动运算问题解决

    JavaScript传参年月日格式日期自动运算问题解决 在javaScript中用ajax传递2020-10-07格式参数时,发现内部进行了运算 最终解决之后的效果 解决方法:利用转义字符和" ...

  4. Javascript验证信用卡号、信用卡类型(最全最新)

    如果浏览不顺畅请到 原文章出处:https://www.sky8g.com/technology/2690/ 请注意可能会提示风险,这是csdn设置网站设置的问题,请放心访问,谢谢. 本篇文章是由SK ...

  5. JavaScript(ES5)

    JavaScript(ES5) 基础数据类型 Number.String.Boolean.undefined.object.Null Number JavaScript 只有一种数字类型.数字可以带小 ...

  6. javascript中的typeof返回值类型

    number,string,boolean,object,function,undefined 一.对于数字类型的操作数而言, typeof 返回的值是 number.比如说:typeof(1),返回 ...

  7. TypeScript 2.1中的类型运算 一个递归的Readonly泛型

    去年12月的 TypeScript 2.1 中加入了 keyof / Lookup Types / Mapped Types 等 (编译期的) 类型运算特性. 本文将介绍这些特性,并用这些特性实现一个 ...

  8. JavaScript实现限制文件上传类型和大小

    JavaScript实现限制文件上传类型和大小 <title>文件上传前台控制检测程序 v0.6</title> <style>body,td {font-size ...

  9. 浅谈JavaScript、ES5、ES6

    什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...

最新文章

  1. C++实现stack【栈】
  2. python生成随机数—random模块
  3. XBOX ONE游戏开发之登陆服务器(一)
  4. tftp下载文件为中文名【原创】
  5. 银辉给园子里的兄弟姐妹们拜年啦
  6. visual basic对文件夹下的excel执行批量删除行操作
  7. 笔者认为,中国的互联网行业需要真正的CEO
  8. Matlab常用的标记符号和颜色
  9. iOS 使用Socket
  10. 飞机游戏跟踪导弹的算法[C#源码]
  11. kettle使用httpClient获取ES索引数据
  12. 大学计算机实验报告u盘启动安装,用U盘安装Win7操作系统实验报告.doc
  13. android隐藏关闭软键盘
  14. roboone机器人_ROBOONE机器人这个品牌怎么样?是否可以加盟投资?
  15. lisp 梯形展开图_斜截圆柱件钣金展开图的AutoCAD二次开发
  16. android系统wifi控制风扇,无线远程遥控风扇设计实现
  17. 腾讯位置大数据中区域热力图数据的数据解析
  18. CSR867x学习笔记:SPP Server and Client
  19. 微信公众号采集,历史文章采集,万能key采集,点赞阅读评论采集
  20. python获取时间戳算法_Python 获取时间,时间戳,时间差

热门文章

  1. 企业邮箱对比免费邮箱,国内邮箱申请哪家好?邮箱哪个安全可靠?
  2. 2020大二下期学期计划
  3. Nginx输出header到access日志文件
  4. java毕业设计鑫通物流车辆调度系统mp4Mybatis+系统+数据库+调试部署
  5. NAACL同传Workshop:千言 - 机器同传
  6. 缓存算法:LFU和LRU的JAVA实现
  7. 百度地图获取的经纬度为4.9e-324,4.9e-324
  8. H.265与H.264的区别详解
  9. java 线程ping pong_面试题。线程pingpong的输出问题
  10. 如何通过微信创业赚钱