1.进制转换
10进制 0-9 最大值+1就是进制
十 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
二 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000
十六 0 1 2 3 4 5 6 7 8 9 a b c d e f 10
1.进制转换的几种计算方式
parseInt(字符串,进制) //就是该字符串当做(后面的什么进制)来转换成十进制!!!
toString(进制) //可以将数值转换为对应的进制字符串 2-36(不能超出范围)

进制补充
1.字母也可以转换二进制 (转成ASCII)
1111 1111 8位2进制 0-255 1B
英文字母 ASCII表中所有字符转换为2进制不超过255,所以就是1B
GB2312 中文简体码表
BIG5 大五码 繁体汉字
Unicode编码 万国码
2.二进制运算符
1.& 与运算 或 | 异或 ^
1&1=1 1|1=1 1^1=0
1&0=0 1|0=1 0^1=1
0&1=0 0|1=1 1^0=1
0&0=0 0|0=0 0^0=0
所有的二进制运算符都受到长度限制超过2的30次幂以上数字不要使用2进制运算符
2.1.异或可用于加密
1."aAZ".charCodeAt(第几位) 将字符串中第几位转换为Unicode编码
2.String.fromCharCode(Unicode编码) 将Unicode编码转换为字符
例:var str= String.fromCharCode("谢天".charCodeAt(0)^0xFFFF)+String.fromCharCode("谢天".charCodeAt(1)^0xFFFF)
var str2= String.fromCharCode("珝ꛖ".charCodeAt(0)^0xFFFF)+String.fromCharCode("珝ꛖ".charCodeAt(1)^0xFFFF)
console.log(str,str2)
2.2. ~运算 (位运算不处理小数的问题)
1. ~位非 加1取负
例:var a=3;
console.log(~a);
2. ~~双位非 所有NaN双位非后都会变成0(常用)
例:var str="asdasd";
在字符串中查找是否有s,并且返回s在第几位,从0开始
str.indexOf("s");
如果没有查找到返回-1
console.log(str.indexOf("z"));
例:console.log(~~3.25);
console.log(~~2.623123);
3.三目运算
1. if(a>3){
b=2
}else{
b=5
}
上述表达式有如下两种三目运算书写方式
1.1 var b=a>3 ? 2 : 3
1.2 a>3 ? b=2 : c=3
2. b=a>3 ? true : false
如果三目运算符返回布尔值时 最好别用
例: var b=a>3 ? false : true
简写:var b=!(a>3)
例:var a=-1
var b=a+=1 ? 3 : 2
console.log(b,a)
4.条件语句 - if
1.条件分支语句 - if
+ 根据条件来决定是否执行某一段代码, 或者选择性执行某一段代码
语法形式1: if 语句
+ 语法: if (条件) { 代码段 }
+ 意义: 如果条件为 true, 那 {} 内的代码执行, 否则不执行
语法形式2: if else 语句
+ 语法: if (条件) { 代码 } else { 代码 }
+ 意义: 如果条件为 true, 执行 if 后面的 {}, 否则执行 else 后面的 {}
+ 两个大括号能且只能执行一个
语法形式3: if else if 语句
+ 语法: if (条件1) { 代码 } else if (条件2) { 代码 } ...
+ 意义: 从第一个条件开始判断, 哪一个条件满足了, 执行哪一个条件后面的 {}
前面的条件满足了, 后面的就都不管了
+ 多个 {} 最多只能执行一个
语法形式4: if else if else 语句
+ 语法: if (条件1) { 代码 } else if (条件2) { 代码 } ... else { 代码 }
+ 意义: 从第一个条件开始判断, 哪一个条件满足了, 执行哪一个条件后面的 {}
当所有条件都不满足的时候, 执行 else 后面的 {} 内的代码
前面的条件满足了, 后面的就都不管了
+ 多个 {} 能且只能执行一个
4.1 - if补充
1.表达式,不管是什么表达式,都会隐式转换为布尔值
例:
ar arr=[3];
if(arr>2){
console.log("aa")
}
var a="b";
if(a>"a"){
console.log("aa")
}
2.当表达式中有用,分割的多个语句时,最后一个语句才是判断条件
例:var a=1;
if(++a,a>=2){
console.log("aa");
}
3.条件省略这里代表直接进入条件
例:if(1){}
if(true){}
4.条件语句块省略{}当条件语句只有一句语句时。可以省略{}
例:if(a>2) b=3;
5. ; 和 , 的区别(细节)
例:if(a>2) if(a>2);
b=3; b=3;
上述两个是有区别的:加 ; 表示条件语句结束 加 , 连接下面语句
例:var a=-1;
var b;
if(a>0)
a=3;
b=2;
6.多分支条件结构和多条件结构是不同(代码优化)
例:var a=4; if(a>3){
if(a>3){ console.log("aa")
console.log("aa") }
}else if(a<0){ if(a<0){
console.log("bb") console.log("bb")
}else{ }
console.log("cc") if(a>=0 && a<=3){
} console.log("cc") }
第二种比第一种判断次数更多不好 第一种满足一个条件就不执行下面了但是第二种每次都要执行所有
补: if(!a){}
if(a==false){}
if(a===false){}
if(a==2){}
if(a===2){}
5.条件语句 - switch
1.条件分支语句 - switch
+ switch 和 if 都是条件分支语句
+ if 一般作为范围型的判断
=> switch 一般作为准确值的判断
基础语法:
switch (要判断的内容) {
case 情况1:
满足情况1 的时候执行的代码
break
case 情况2:
满足情况2 的时候执行的代码
break
default:
所有情况都不满足的时候执行的代码
}
注意:
1. 判断的变量 必须 和 case 是 值和数据类型都一样, 才叫做满足条件
2. 一般不作范围性的判断
3. default 可以不写, 不写的时候, 那么所有条件都不满足就没有代码执行
4. break 需要书写
=> 如果不写 break 会发生 break 穿透效果
穿透效果: (如果没有使用break 叫做穿越。故意制造穿越,以解决必须多个条件中每个都必须要执行的语句内容)
+ 从满足条件的 case 开始执行
+ 下一个 case 不管是否满足, 都会执行代码
+ 直到遇到 break 或者 switch 结束为止
补充
1. 1、去除魔术字符串
如果使用Symbol并且设置为常量,当赋值时只能赋值这个常量,给其他字符串不能进入减少在使用字符串设置值时,碰巧得到相同字符串而进入条件情况
2、状态机管理
状态管理有效的解决条件变化时的冲突问题,因为在不同时期条件的结果会有所交叉
setInterval(function(){
switch(state){
case RIGHT:
x++;
if(x===200) state=BOTTOM;
break;
case LEFT:
x--;
if(x===0) state=TOP;
break;
case TOP:
y--;
if(y===0) state=RIGHT;
break;
case BOTTOM:
y++;
if(y===200) state=LEFT;
break;
}