一、+号
1.进行数据相加
2.+号放在数据前面就是取正数
3.与字符串运算时,是字符串拼接
4.可以将数字字符串或布尔类型等隐士转换成number类型
+‘123’=123、+‘string’=NaN、+true=1、+false=0、+[ ] = 0、 +[1,2,3]=NaN
+{}=NaN、+null=0、+undefined=0
二、!取反
经常被用作条件判断时的取反操作,类型判断等,还可以用'!'将变量转换为Boolean类型
1.!null=true、!undefined=true、!' '=true、!number=flase、!'abc'=flase、!2=false、
!{}=false、![ ] =false、!obj=false
三、++
++放在前面,并进行赋值:先累加,后赋值
++放在后面,并进行赋值:先赋值,后累加
四、JavaScript隐式转换(javaScript中有两类数据类型:原始类型、对象类型)
1.有关==的隐式转换
undefined等于null、
字符串和数字比较时,字符串转数字
数字和布尔比较时,布尔转数字
字符串和布尔比较时,两者转数字
2.引用类型的转换(先要把引用类型转成基本类型,再按上述的方法比较)
PreferredType转换策略
如果PreferredType被标记为Number,则会进行下面的操作流程来转换输入的值。
1、如果输入的值已经是一个原始值,则直接返回它
2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
3、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常。
案例
①[ ] + [ ] = ' '
解释:先进行ToPrimitive,两个都是Array对象,不是Date对象,所以以Number为
转换标准,先调用value of(),结果还是[ ],不是原始值,所以继续调用toString()
结果还是' '(空字符串)原始值,将它们拼接结果为' '。
②[ ] + { } = [Object Object](字符串)
进行ToPrimitive,依然是以Number为转换标准。
[ ]的结果是“”。
{ }先调用valueOf(),结果是{ },不是原始值,所以继续调用toString(),结果是“[object Object]”,是原始值,将“[object Object]”返回。
加号两边结果都是String类型,所以进行字符串拼接,结果是“[object Object]”。
③+[ ] = 0
[ ]的原值是””, 将””转化成Number结果是0。
④{ } + { } = [object Object][object Object]