Javascript 从ES5到ES7 - 14 类型运算
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 类型运算相关推荐
- JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6
Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...
- JavaScript、ES5和ES6的介绍和区别
JavaScript简介 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. JavaScript由三部分组成: ECMAScript(核心)+DOM ...
- JavaScript传参年月日格式日期自动运算问题解决
JavaScript传参年月日格式日期自动运算问题解决 在javaScript中用ajax传递2020-10-07格式参数时,发现内部进行了运算 最终解决之后的效果 解决方法:利用转义字符和" ...
- Javascript验证信用卡号、信用卡类型(最全最新)
如果浏览不顺畅请到 原文章出处:https://www.sky8g.com/technology/2690/ 请注意可能会提示风险,这是csdn设置网站设置的问题,请放心访问,谢谢. 本篇文章是由SK ...
- JavaScript(ES5)
JavaScript(ES5) 基础数据类型 Number.String.Boolean.undefined.object.Null Number JavaScript 只有一种数字类型.数字可以带小 ...
- javascript中的typeof返回值类型
number,string,boolean,object,function,undefined 一.对于数字类型的操作数而言, typeof 返回的值是 number.比如说:typeof(1),返回 ...
- TypeScript 2.1中的类型运算 一个递归的Readonly泛型
去年12月的 TypeScript 2.1 中加入了 keyof / Lookup Types / Mapped Types 等 (编译期的) 类型运算特性. 本文将介绍这些特性,并用这些特性实现一个 ...
- JavaScript实现限制文件上传类型和大小
JavaScript实现限制文件上传类型和大小 <title>文件上传前台控制检测程序 v0.6</title> <style>body,td {font-size ...
- 浅谈JavaScript、ES5、ES6
什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...
最新文章
- C++实现stack【栈】
- python生成随机数—random模块
- XBOX ONE游戏开发之登陆服务器(一)
- tftp下载文件为中文名【原创】
- 银辉给园子里的兄弟姐妹们拜年啦
- visual basic对文件夹下的excel执行批量删除行操作
- 笔者认为,中国的互联网行业需要真正的CEO
- Matlab常用的标记符号和颜色
- iOS 使用Socket
- 飞机游戏跟踪导弹的算法[C#源码]
- kettle使用httpClient获取ES索引数据
- 大学计算机实验报告u盘启动安装,用U盘安装Win7操作系统实验报告.doc
- android隐藏关闭软键盘
- roboone机器人_ROBOONE机器人这个品牌怎么样?是否可以加盟投资?
- lisp 梯形展开图_斜截圆柱件钣金展开图的AutoCAD二次开发
- android系统wifi控制风扇,无线远程遥控风扇设计实现
- 腾讯位置大数据中区域热力图数据的数据解析
- CSR867x学习笔记:SPP Server and Client
- 微信公众号采集,历史文章采集,万能key采集,点赞阅读评论采集
- python获取时间戳算法_Python 获取时间,时间戳,时间差
热门文章
- 企业邮箱对比免费邮箱,国内邮箱申请哪家好?邮箱哪个安全可靠?
- 2020大二下期学期计划
- Nginx输出header到access日志文件
- java毕业设计鑫通物流车辆调度系统mp4Mybatis+系统+数据库+调试部署
- NAACL同传Workshop:千言 - 机器同传
- 缓存算法:LFU和LRU的JAVA实现
- 百度地图获取的经纬度为4.9e-324,4.9e-324
- H.265与H.264的区别详解
- java 线程ping pong_面试题。线程pingpong的输出问题
- 如何通过微信创业赚钱