1、进制
十进制
0,1,2,3,4,5,6,7,8,9,10
二进制
0,1,10,11,100,101,110,111,1000,1001,1011,1111
八进制 以三位进行切割形成了八进制 以0开始是8进制
0 ,1,2,3,4,5,6,7,10,11,13,13
十六进制 以四位二进制切割形成十六进制 0x开头的是16进制
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
转换二进制
54 110110
110110=1*2(5)+1*2(4)+0*2(3)+1*2(2)+...
0675676
110 111 101 110 111 110
0X F75B
1111011101011011
var a=0xff;
a=a.toString(16);
a=Number(a);
a= Number(a,2); 255
console.log(a);
颜色 一种通过RGB色 255 255 255
FF FF FF
0xFF0000 FF透明度 透明度最高为1最低为0
0xFF000
0x00FF00
0x0000FF
0x000000黑色
0xFFFFFF白色
0xFFAA00橘黄色 红色多一些 黄色小一些
矢量图 线条勾勒
一个像素必然就是一个纯色彩 8个16进制 FF算一个字节 4*160*160 102400
一个图像大小会以2的2次幂增长 64 128 256 如180*180 但在内存中实际需要256
存储的时候图像变成二进制,用的时候二进制再变成图像
声音和图像分开保存 用的时候合并在一起
2.位运算
代码不宜被别人看懂 用于专项的处理部分的内容
&&逻辑运算 与
1&1=1 1&0=0
位运算&
25&34=0
011001
100010
000000
6&7=6;
任何数&2的N次幂-1都是 该数
37&7 只考虑后三位 5
|运算
1|1=1;0|1=1;1|0=1;0|0=0;
25 34 (25|34)=59;
111011=3*16+11=59;
^异或运算 相同的为0不同的为1
6^7=1;
0110 0111
0001=1
console.log(0^0);
// 0^0=0 1^1=0
// 0^1=1 1^0=1
加密解密
相同为0不同为1
console.log(3627^1234);2809
console.log(2809^1234);3627
~位非运算
加1取负数
~1=-2;
~-5=4;
var str="abcdef";
if(~str.indexOf("a")){ g
判断是否可以查找到该字符
}
if(!~str.indexOf("a")){
不能在这个字符串中找到该字符
}
3.三目运算符
var a=3>2?1 :0;
如果条件是否成立 返回紧跟条件的第一个值 否则返回:后面的第一个值。
console.log(a);
如果表达式的结果转换为布尔值为真时,返回问号后面的值,否则返回:后面的
三目运算符比赋值运算符的优先级高
问号前面的内容会自动隐式转换为布尔值
当需要返回的事布尔值时,请不要使用三目运算符
var a=3>2 ? true:false;
var a=3>2 ? 直接这么写
用于简单的条件处理
var a=1>2?1: 3<4 ? 0:-1; 0
var a=1;-10 4 6
a=a--?a++ :++a;
console.log(a);
console.log(a);
var a=4;
var b=a-= 0 ?a++ :++a;
console.log(b,a); -1 -1
var a = 4;
b = a -=1 ? a++ : ++a;
console.log(b, a);
首先三目运算优先级比赋值高 b=a-= 1?a++ :++a;
1 所以是 a++ ,b=a-=4 b=0 a=0
>>位移运算
var a=4;
a=a-= 1 ? a++:++a;
consolelog(b,a);
<input type="checkbox" id="div0">
<label for="div0" id="lables">你好</label>
var div0=document.getElementById("div0");
var lables=document.getElementById("lables");
div0.onclick=function(){
lables.style.color=div0.checked ? "red" :"green"; }
if语句
var a="101";
if(a*=10){
console.log(a); 1010
}在这里,条件不管什么表达式都会隐式转换为布尔值
! 在条件语句中大量用!配合完成不是这种非真进入
if(条件)[
如果条件表达式运算后隐式转换为布尔值是true,进入该条件语句
]
if(条件){
}else{
条件隐式转换为布尔值为false时进入
}
if(条件1){
}else if(条件2){
}else if(条件3){
}else{
}
这种仅执行其中一个条件结果
if(条件1){
}
if(条件2){
}
if(条件3){
}
// 每个条件都会判断,根据判断结果执行对应的内容
一个方块在另一个方块中,不让其出框
var x,y
// if(x<0) x=0;
// if(x+50>500) x=500-50;
// if(y<0) y=0;
// if(y+50>500) y=500-50;
5代码块
switch(表达式){
case 值1:
// 当表达式绝对等于值1时执行这里的内容
// break 跳出,如果不写break不判断值2是否相等,直接穿越
break;
case 值2:
// 当表达式绝对等于值2时执行这里的内容
break;
case 值3:
// 当表达式绝对等于值3时执行这里的内容
break;
case 值4:
// 当表达式绝对等于值4时执行这里的内容
break;
default:
// 默认以上条件都不满足时执行这里
}
// 用来实现状态机
/* var status="";
const RUN="run";
const WALK="walk";
const JUMP="jump";
const FIRE="fire";
status=RUN;
switch(status){
case RUN:
console.log("跑步动画")
break;
case WALK:
console.log("走路动画")
break;
case JUMP:
console.log("跳跃动画")
break;
case FIRE:
console.log("开火动画")
break;
default:
} */
判断成绩等级
switch(true){
case score>=90 && score<=100:
console.log("优秀");
break;
case score>=80:
break;
case score>=70:
break;
case score>=60:
break;
default:
}
while
while效率高于for
程序为了可维护,写代码时必须不能够重复
while(条件){
}条件表达式的值都是将结果转换为布尔值完成的 只有一句话的时候 while后面可以不带{}
var i=0;
var j=0;
循环前增加id:
xietian:while(i++<10){
j=0;
while(j++<10){
break 跳出到指定的id位置
if(i*j>100) break xietian;
}
}
console.log(i,j);