运算符
逻辑运算符
! 逻辑非
返回值
true
空字符串
0
null
NaN(非数字的一个属性,代表不是数字。可以通过Munber.NaN来设定)
undefined
false
对象
非空字符串
非0数值
特性
如果运算数的值为false则返回true,否则返回false
连续两次使用,可以将任意类型转为布尔值
&& 逻辑与
规则
第一个操作数是对象,则返回第二个操作数
第二个操作数是对象,第一个操作数值位true时返回该对象
两个操作数都是对象,则返回第二个操作数
一个操作数是null,则返回null
一个操作数是NaN,则返回NaN
一个操作数是undefined,则返回undefined
特性
而且仅当两个运算数的 值都是true时,才返回true,否则返回false
短路操作:当第一个操作数的值是false则不在对第二个操作数进行求值
|| 逻辑或
规则
第一个操作数是对象,则返回第一个操作数
第一个数操作数为false,则返回第二个操作数
两个操作数都是对象,则返回第一个操作数
两个操作数都是null,返回null
两个操作数都是NaN,则返回NaN
两个操作数都是undefined,则返回undefined
特性
而且仅当两个操作数的值都是false时,才返回false,否则返回true
如果第一个操作数值位true,则不会对第二个操作数进行求值
关系运算符
大小关系检测
运算符
< 如果a小于b,则返回true
> 如果a大于b,则返回true
<= 如果a小于等于b,则返回true
>= 如果a大于等于b,则返回true
操作规则
数值与数值的比较,则比较他们的代数值
仅一个运算数是数值,则将另一个运算数转为数值,再比较代数值
字符串间的比较,逐字比较他们的unicode数值
字符串与数值的比较,将运算数转换字符串并进行比较
运算数即非数字也非字符串,则转为数值或字符串后进行比较
运算数无法被转为数值或字符串,则返回false
与NaN比较,则返回值为false
等值关系检测
相等比较
操作符
== 比较两个运算数的返回值看是否相等
!= 比较两个运算数的返回值看是否不相等
类型转换
布尔值
true 1
false 0
对象 调用valueof()基本类型(获取对象的原始值)
字符串与对象的比较:字符串转为数值
比较原则
null和undefined:相等,比较前不需要进行任何转换
NaN:与任何数比较都不相等,包括其自身
对象:是否属于同一对象。是,则返回 ==。不是,则为!=
相同比较
运算符
=== 比较两个运算数的返回值以及数据类型看是否相同
比较两个运算数的返回值以及数据类型看是否不同
比较原则
值类型间比较 :只有数据类型相同,且数值相等时才能够相同
值类型与引用类型比较,肯定不相同
引用类型间比较:比较他们的引用值(内存地址)
位运算符
基础知识
类型
有符号
数值位 前31位
符号位 第32位
0 正数
1 负数
无符号
只能是正数
第32位表示数值
数值范围可以加大
数值范围 -2147483648~2147483647
存储方式
正数
纯2进制存储
31位中每一位表示2的幂
用0补充无用位
负数
2进制补码存储
补码的计算步骤
1.确定该数字的非负版本的二进制表示
2.求得二进制反码,即要把0替换为1,把1替代为0
3.把二进制反码上加1
当做0来处理的特殊值
NaN
Infinity
逻辑位运算
返回值为1
按位非~ 0
按位与 & 对应位全为1
按位或 | 任何一位是1
按位异或^ 既不同时为0.也不同时为1
返回值为0
按位非~ 1
按位与 & 任意一位为0
按位或 | 对应位全0
按位异或^ 对应位全为0或者1
位移操作
左移 <<
将数值的所有位左移指定的位数
所有空位用0补充
左移1位对其乘2,依次类推。。。
有符号右移
将数值的所有位右移指定的位数
移出的为被舍弃
保留符号位
右移一位对其除以2,依次类推。。。
其他运算符
?: 条件运算符,简洁的if else
typeof 类型判定运算符
, 逗号,在一行语句中执行多个不同的操作
void 舍弃运算数的值,返回undefined作为表达式的值
选择语句
if
句法
if(条件表达式1){
代码段一;
}esle if(条件表达式2){
代码段二;
}else{
代码段三;
}
流程
1.判断条件1,如果返回值为true则执行代码段1
2.如果条件1的返回值为false则跳过代码段一,并检测条件2
3.如果所有表达式的值均false,则执行else后面的语句
特性
结构复杂,可嵌套
可测试多个条件表达式
表达式的值具有线性特征
表达式的值是动态的
适用于任意类型的数据
课处理复杂的逻辑关系
switch
句法
switch(条件表达式){
case 标签1:
代码段1;
break;
...................
default:
代码段n;
break;
}
流程
1.计算表达式的值,并与各标签相比较
2.若找到与之匹配的标签,则执行其后的代码段。如果没有break,则继续往下执行
3.若没有找到与之匹配的标签,则直接执行default之后的代码段
格式
case 标签为常量,可以是字符串或数字
每个标签均已冒号:结束
虽然break与default为可选项,但为了逻辑清晰最好不要省略
case的值必须和条件表达式的值完全匹配
特征
结构简洁,专为多重选择设计
仅可以测试一条件表达式
表达式的值具有离散型
表达式的值是固定的,不会动态变化的
仅能仅能用用在整数,枚举,字符串等类型数据
仅能处理多个枚举型逻辑关系
循坏语句
while
语法
while(条件表达式){
循坏执行代码;
}
流程
1.判断条件表达式的值
2.当真为true时循坏执行代码段;
3.当值为false时退出循坏体
特性
1.先检查条件,再执行循坏
2.条件不满足则循坏一次也不执行
时机
一个动作被重复执行到满足某个条件时
do—while
语法
do{
循坏执行的代码段;
}while(条件表达式);
流程
1.先执行循坏体内的代码再进行判断
2.如果表达式的值为true,则重复执行代码段
3.如果表达式的值为false,则推出循环体
特性
先执行循环体,再进行条件判断
循环体内代码至少执行一次
时机
希望一个动作至少被执行一次时
for
语法
for(循环变量 = 初值;循环判断条件;递增/递减计数器(循环后表达式)){
循环代码段;
}
流程
1.用循环变量初始值与循环条件相比较,确定返回值
2.如果返回值为true则执行循环体
3.执行完一次后进行递增/递减运算
4.将运算结果与循环条件相比较
5.如果返回值为true则继续执行循环体,如果返回值为false则退出循环体
时机
重复一个动作到一次数时
for-in
语法
for(声明变量 in 对象){
代码段;
}
作用
枚举对象属性
注意事项
循环输出的属性顺序不可预知
对象的值不能是null或undefined
跳转语句
return
终止函数体的运行,并返回一个值
break
终止整个循环,不再进行判断
continue
结束本次循环,接着去判断是否执行下次循环