目录
&、^、~、|、<<、>>、>>>(按位与/按位异或/按位非/按位或/按位左移/按位右移/无符号按位右移)
Number.isNaN/Number.isInfinity/Number.isInteger(a)
JavaScript的7种数据类型
6种基本数据类型
Undefined
对申明了的未赋值变量系统自动赋的值。
Null
空对象指针。
Symbol
ES6 引入了一种新的原始数据类型,之后用到,会写一篇详细介绍。
Boolean
只有2个值true或者false。
Number
整数、浮点数和NaN
String
字符串。
1种复杂数据类型
Object
一组数据和功能的集合为对象,包括function、Array等。
隐式调用函数
Boolean(obj)
除以下类型其他返回true
- 布尔值false。
- 空字符串''。
- 0和NaN。
- null和undefined。
注意:Boolean('0')=true、Boolean(+'0')=false。
Number(obj)
JavaScript中常用函数方法(数值转换篇包括Math上的静态方法)_AIWWY的博客-CSDN博客
String(obj)
https://blog.csdn.net/AIWWY/article/details/114125693
存在隐式调用的操作符
一元运算符
++/--/+/-(这里的+/-理解为正负的符号)
先隐式调用函数Number()将操作符号连接的内容转换为数字类型再进行操作。
!
先隐式调用函数Boolean()将操作符号连接的内容转换为Boolean类型,再进行取反操作。
二元运算符
+(不表示数字正负号,只表示数值之间的加法)
如果连接两边有字符串存在则调用隐式函数String()将两边都转换为字符串进行连接。
如果连接两边无字符串存在则调用隐式函数Number()将两边都转换为数值进行计算。
特殊:{}+[]=0,这是因为系统把{}理解为空的代码块了而不是对象,所以仅执行了+[],而+[]等于0,这也能解释为什么赋值给变量值或颠倒顺序会有不同的答案(a={};b=[];a+b='[object Object]';[]+{}='[object Object]')。
-、*、/、%(不表示数字正负号,只表示数值之间的减法)
调用隐式函数Number()将两边都转换为数值进行计算。
&、^、~、|、<<、>>、>>>(按位与/按位异或/按位非/按位或/按位左移/按位右移/无符号按位右移)
先隐式调用函数Number()将操作符号连接的内容转换为数字类型再进行操作(NaN和Infinity的值都默认为0)。
注意没有无符号按位左移,无符号右移只在负数时有区别,即以0补充空位。
按位非~运算介绍链接
https://blog.csdn.net/AIWWY/article/details/120321086
==、!=
同类型之间直接比较,其中注意对象之间的比较是引用值,即只有同一个对象才相同(例如{}=={}返回false,也包括数组[]==[]返回false),然后数值类型中NaN谁都不等于,包括自己。
不同类型比较:
- null==undefined返回true,且null或undefined参与比较时,不会有隐式类型转换,即只等于本身和对方。
- 其它两边都隐式调用Number()转换为数值类型后进行比较(即可以识别二、八、十六进制都会转换为十进制的进行比较)。
>、>=、<、<=
如果两个数都是字符串则比较两个字符串中的第一个元素对应的Unicode编码数值大小。
其它情况隐式的调用Number()转换为数值类型进行比较(NaN与任何数值进行比较都返回NaN)。
&&、||(逻辑与、逻辑或)
注意当是返回第一个参数时,第二参数是不会被执行的。
&&:当两参数中有不为Boolean类型的值时,对第一个参数隐式调用Boolean()函数
- 当第一个为true时,直接返回第二个参数。
- 当第一个为false时,直接返回第一个参数。
||:当两参数中有不为Boolean类型的值时,对第一个参数隐式调用Boolean()函数
- 当第一个为true时,直接返回第一个参数。
- 当第一个为false时,直接返回第二个参数。
存在隐式调用的语句
if(a){}
隐式调用Boolean()将a转换为true/false来判断{}中的语句是否执行。
while(a){}
隐式调用Boolean()将a转换为true/false来判断{}中的语句是否执行。
for(;a;){}
隐式调用Boolean()将a转换为true/false来判断{}中的语句是否执行。
document.write(a)
隐式调用a.toString()将a转换为字符串再执行该语句。
Number.isNaN/Number.isInfinity/Number.isInteger(a)
隐式调用Number()将a转换为数值类型再执行该语句。分别为判断是否为NaN、Infinity和整数。