10、操作符
○ 算数操作符:
=:赋值操作符 从右向左赋值
var a=10;
+ +=:
+:
a+b:
1.如果两个变量均为number类型,直接相加
2.如果两个变量均为非number类型,并且均不为string类型,也不为object类型
null undefined boolean
直接转换为number类型进行相加(Number())
3.如果其中一个值为string类型,另一个不为object类型,直接进行字符串拼接
10+"10"=1010
4.如果其中一个值为object类型,
另一个值不为string类型:
10+{
}
默认调用{}的tostring()
另一个值为string类型:
"10"+{}=10[object Object]
如果只重写了toString():
调用tostring()
如果只重写valueof():
调用valueof
如果既toString()有valueof():
valueof()
+=:
a+=2 -> a=a+2;
- -=:
-:
a-b:
-=
a-=4->a=a-4
* *=
a*=4->a=a*4
/ /=
% %=
○ 比较操作符(返回值均为boolean)
§ >:
□ a>b:
® num:num——》直接比较
® 非number(不为string):num——》将非number转换为number进行比较
® 非num:非num——》转为number
® string:string——》比较字符编码
® num:obj——》
默认情况下调用tostring()
如果只tostring(),调用tostring()
如果只valueof(),调用valueof()
如果既重写了tostring,又重写了valueof,调用valueof()
§ <:
§ >=:
§ <=:
§ ==:
□ 先进行数据类型转换,再进行比较
□ null==null true
undefined==null true
undefined==undefined true
NaN==NaN false
“10” == 10 true
§ ===:
□ 全等操作符
□ 先进行数据类型的比较,数据类型相同,再比较值
□ 如果数据类型不同,直接返回false
null === undefined //false
“10” === 10 //false
obj === obj 比较引用地址
○ 逻辑操作符
§ &&:
□ a&&b:
转为Boolean的结论:同真才真,有假则假
a、如果第一个数为false、""、null、undefined、nan能够转换为false的值,则返回第一个数
b、如果第一数不返回false,则返回第二个数
§ ||:逻辑或
□ 结论:有真则真,同假才假
□ 1.如果第一个数为null/undefined/false/“”/nan->返回第二个数
□ 2.如果第一个不为上述值,返回第一个数
§ !:逻辑非
□ !null
□ 1.将null转换为boolean
® Boolean()
□ 2.取反
结果一定为boolean类型
□ 对一个变量,连用两次逻辑非,相当于将当前变量转换为boolean类型
!!null:false
○ 三目运算符
§ a>b?console.log(a):console.log(b)
表达式?成立:不成立
if(a>b){
//成立
}else{
//不成立
}
○ 一元运算符
§ +:
+a:
相当于调用了Number(a)
§ -:
-a
:-Number(a)
§ ++:
□ a++:a=a+1
先进行变量操作,再进行++
□ ++a:a=a+1
先进行++操作,再进行变量操作
§ --:
a--:
a=a-1
--a:
a=a-1
var b = 4;
c = b--; //第一个b是第三方的b
console.log(b); //4
console.log(c);
○ 位运算
§ js中32位2进制
□ 原码-》反码-〉补码
□ 正数:
® 原码=反码=补码
□ 负数:
® 反码=原码的符号位不变,其他位取反
® 补码=反码+1
□ ....128 64 32 16 8 4 2 1
-3+4:
-3:
1000 0011:原码
1111 1100:反码
1
------------
1111 1101:补码
4:
0000 0100:源码=补码
sum:
1111 1101
0000 0100
-----------
补:0000 0001=原
流程结构:
顺序结构
分支结构
循环结构
○ 条件分支语句
if(表达式boolean){
//true
}
.....
if(a>b){
//true
}else{
//false
}
if(){
}else if(){
}else if(){
}else if(){
}else{
}
switch case
switch语句中的判断使用的是===
switch(变量/表达式){
case key:
//
break
case key:
//
break
default:
如果写在第一行,一定要+break
}
§ break:
跳出循环体
§ continue:
跳出本次循环,继续进行下一次循环
○ 循环语句
§ 循环三要素:
初始条件;结束条件;迭代条件
§ 1、前置条件循环语句
for(初始条件;结束条件;迭代条件){
//循环体
}
死循环:
for(;;){}
label语句:
标示循环的名称
while和do…while一般用来解决无法确认;for循环一般在循环次数确定的时候比较方便
with(){}
var obj= {
name:"lisi",
age:20,
gender:'men'
}
console.log(obj.name);
console.log(obj.age);
console.log(obj.gender);
with(obj){
console.log(name);
console.log(age);
}
§ 2、后置条件循环语句
循环体至少执行一次
初始条件;
do{
//循环体
//迭代条件
}while(结束条件)
§ 增强for循环:
for in循环
主要用来循环对象
var obj={
name:'lisi',
age:20,
gender:'men'
}
for(var key in obj){
key:属性名
obj[key]:属性值
循环体
}