1.算数操作符(=、+、+=、-、-=)
=:赋值操作符(从右向左赋值)
- eg: var a=10;
+:(以+为例)
a+b:
1.a、b均为Number,直接相加
eg:
2.如果两个变量均为非Number类型,并且均不为String类型,也不为object类型(null、undefined、boolean-),直接转换为Number类型进行相加
eg:
3.如果其中一个值为String类型,另一个为Number,直接进行字符串拼接
eg:
4.如果一方为object类型,另一方不为String类型
- 默认情况下调用toString() --->返回值为[object object]类型
- eg:
- 如果只重写了toString(),调用toString()
- eg:
- 输出的sum值为20,说明调用了toString,返回10,然后sum值10+10=20
- 如果只重写了valueOf(),调用valueOf()
- eg:
- 输出的sum值为40,说明调用了valueOf(),valueOf返回30,sum值为10+30=40
- 如果既重写了toString,又重写了valueOf,调用valueOf()
- eg:
2.比较操作符(>、>=、<、<=、==、===)
- 返回值均为Boolean类型
>: 例如 a、b进行比较:
1.如果双方都为Number类型,直接进行比较
2.如果一方为Number类型,另一方为非Number数据类型(不为string),那么将非Number转换为Number进行比较
3.如果均为非Number类型,都转换为Number类型比较
- 如果两个均为非Number类型中的String类型,比较字符编码
- 如果一方为Number类型,另一方为object
- 默认情况下调用tostring()
- 如果只重写了tostring(),调用tostring()
- 如果只重写了valueof(),调用valueof()
- 如果既重写了tostring,又重写了valueof,调用valueof()
==:
1.同上述情况一样
2. obj==obj(比较引用地址)
- 先进行数据类型转换,再比较 值
- "10"==10 //true
- 直接测试:console.log("10"==10); -->true
===:全等操作符
- 先进行数据类型的比较,数据类型相同,再比较值
- 如果数据类型不同,直接返回false
- eg:
- obj===obj ----> 比较引用地址是否相同
3.逻辑运算符
- &&: 逻辑 与
- 规则: a&&b:
- 不是说a&&b为true、flase,(在if条件语句中需要boolean)
- 转为Boolean的结论:同真才真,有假则假
- 1.如果第一个数为 flase、""、null、undefined、nan能够转换为flase的值,则返回第一个数
- 2.如果第一个数不返回false,则返回第二个数
- if(a&&b){ }
- | |:逻辑 或
- 结论:有真则真,同假才假
- 1.如果第一个数为 flase、""、null、undefined、nan能够转换为flase的值,则返回第二个数
- 2.如果第一个数不为上述值,返回第一个数
- !:逻辑 非
- !null
- 1.先将null转换为Boolean //Boolean()转换函数
- 2.取反
- 结果一定为Boolean类型
- eg:console.log();
注:对一个变量连用两次逻辑非,相当于(直接调用Boolean()转换函数)将当前变量转换为boolean类型
- !!null ---》flase
4.三目运算符
- 表达式(转为boolean值判断)?成立:不成立
- 表达式?true:false
- a>b? console.log(a):console.log(b)
- 等同于条件分支语句
5.一元操作符
- +(使用在变量之前)
- +a:相当于调用了Number(a)
- eg:
- -
- -a
- -(+a) :相当于 - Number(a)
- ++
- a++:a=a+1
- 先进行变量操作,再进行++操作
- eg1:
- ++a:a=a+1
- 先进行++操作,再进行变量操作
- eg2: