定位属性:是可以将元素按照定位的类型进行移动
position:
绝对定位:absolute(如果是块标签设置,类似浮块)
相对使用根据该元素的祖先元素(父元素或父标签)进行移动,
如果当前元素没有父元素,就是针对body进行移动;
相对定位:relative
根据该元素原来的位置进行定位,(如果是块标签设置,还是占一行空间)
固定定位:fixed
根据父元素进行定位的一种方式
特点:不会随着滚动条的滚动而滚动
left:设置定位左边的距离
top:设置定位上边的距离
1.内部方式:在head标签体中或者body下面书写
script标签,type默认不写。
(省略:脚本类型"text/jscript"或者"text/javascript")
2.导入外部js文件:
scritp标签必须
1)结束标签
2)src属性="js文件地址"
写法:
3.javascript常用的内置函数:
1)向浏览器打印内容
document.write("hello,javavscript");
2)弹消息提示框 (window是浏览器窗口,顶级对象,可以省略)
window.alert("helloworld");
alert("hi!!!");
3)在浏览器的控制台输出内容
内置对象:console
console.log("hello,javascript我来了");//日志函数
//单行注释
/*文字描述 (多行注释) */
变量:在程序的执行过程中,其值在不断发送改变的量!
js定义变量的注意事项
1)定义变量的三要素 :var 变量名 = 初始化值;
2)定义所有的变量都是var,而且var可以省略不写!
3)js中,变量可以重复定义的,后面的值将前面的值覆盖!
javavscript:是一个弱类型(语法结构非常不严谨)
java语言:后端语言的一种强类型语言(语法结构非常严谨)
查看一个变量的数据类型的行数:typeof(变量名)
基本数据类型划分:
1)无论是整数还是小数,数据类型number类型
2)布尔类型 :boolean :用于逻辑判断:要么true(真) false(假)
3)字符串类型:string :无论变量值"字符串"还是'字符':结果都是string
4)未定义类型:undefined(没有意义的)
引用数据类型:
5)object类型:对象类型
var a=10;
var a=20;
var b=3.14;
var c=true;
var d=false;
var e="helloworld"; //双引号括起来的内容:字符串
var f='a'; //单引号括起来单个内容:字符
var g=new Object();
//Object是js中内置对象(浏览器中本身存在的)
//创建对象 格式:var 对象名 = new 对象() ;
var k; //未定义
document.write("a的值是:"+a+",a的数据类型是"+typeof(a)+"
");
document.write("b的值是:"+b+",b的数据类型是"+typeof(b)+"
");
document.write("c的值是:"+c+",b的数据类型是"+typeof(c)+"
");
document.write("d的值是:"+d+",b的数据类型是"+typeof(d)+"
");
document.write("e的值是:"+e+",b的数据类型是"+typeof(e)+"
");
document.write("f的值是:"+f+",b的数据类型是"+typeof(f)+"
");
document.write("g的值是:"+g+",b的数据类型是"+typeof(g)+"
");
document.write("k的值是:"+k+",b的数据类型是"+typeof(k)+"
");
字符串拼接符号
任何数据+字符串="新的字符串"
以下为一些例子:
//字符串+任何数据="新的字符串"
document.write("helloworld"+'a'+"123"+"
");
//"helloworld"+'a' ="helloworlda"
//"helloworlda"+1 = "hellworlda1"
document.write("helloworld"+'a'+1+"
");
//'a':是单引号括起来,数据类型是string(字符串)
//'a' +1 = "a1"
//"a1" +"helloworld" = "a1helloworld"
document.write('a'+1+"helloworld"+"
");
document.write("
") ;
//"5+5="+5 = "5+5=5"
//"5+5=5"+5 = "5+5=55"
document.write("5+5="+5+5+"
");
//5+5 = 10 此时+是加法运算
//10+"=5+5" = "10=5+5"
document.write(5+5+"=5+5"+"
");
//"双引号括起来的"或者js中''--都是string字符串
//字符串就是常量
document.write("hellOjavascript!");
基本的算术运算符: (js中/不会默认取整,而java语言默认取整!)
+,-,*,/,%模(求余)
扩展的算术运算符:
++或者--
单独使用:
无论++或者--在数据的前面还是后面都是对当前这个值进行自增1或者自减1
参与运算:
1)++或者--在数据的前面,先自增或者自减,然后运算
2)++或者--在数据的后面,先运算在自增或者自减
以下为一些例子:
//算术运算符
//定义两个变量
var a=4;
var b=5;
document.write("a+b的值是"+(a+b)+"
");
document.write("a-b的值是"+(a-b)+"
");
document.write("a*b的值是"+(a*b)+"
");
document.write("a/b的值是"+(a/b)+"
");
document.write("a%b的值是"+(a%b)+"
");
document.write("
");
var x=4;
var y=5;
document.write("x的值是:"+x+"
");
document.write("y的值是:"+y+"
");
document.write("
");
//单独用 :++或者--在数据的前面
++x;
--y;
document.write("x的值是:"+x+"
");
document.write("y的值是:"+y+"
");
document.write("
");
var t=4;
var z=5;
//单独用:++或者--放在数据的后面
z++;
y--;
document.write("x的值是:"+t+"
");
document.write("y的值是:"+z+"
");
document.write("
");
var p=4;
var q=5;
//参与运算使用:++或者--在数据的前面
//var m = ++x ;//++4 = 5--->赋值给m,m结果5
//var n = --y ;//--5= 4 --->赋值给n,n结果4
var m = ++p;
var n = --q;
document.write("x的值是:"+p+"
");
document.write("y的值是:"+q+"
");
document.write("m的值是:"+m+"
");
document.write("n的值是:"+n+"
");
document.write("
");
var a=4;
var b=5;
//参与运算使用:++或者--在数据的后面
var j =a++;//将a先赋值给j,j的值4 ,x变量在自增4++
var k =b--;//将b先赋值给k,k的值5 ,y变量自减 5--
document.write("x的值是:"+a+"
");
document.write("y的值是:"+b+"
");
document.write("m的值是:"+j+"
");
document.write("n的值是:"+k+"
");
基本的赋值运算符 就是"="
var 变量名 = 值;
将值赋值给变量名
注意事项:
"="不写成==
扩展的赋值运算符:
+=,-=,*=,/=,%=
将扩展的赋值运算符左边的变量和右边数据值操作后,在赋值给左边的变量;
var a=10;
a += 20;//拿a+20在赋值给a 等价于 a = a+20;
以下为一些举例:
//定义变量a,给赋值10
var a=10;
//将整数10赋值给变量a
document.write("a的值是:"+a+"
");
//==比较运算符:结果要么是true/false
//var a == 100; //语法错误
//js弱类型语言:true 就是1 /false就是0
document.write(true+100,"
");
var x=100;
x+=100;//直接等价于 x = x+ 100;
document.write("x的值是:"+x+"
") ;
关系运算符:
无论这个符号的连接表达式在怎么复杂,结果都是true/false
<,>,<=,>=,==,!=
注意事项:==不能写成=
以下为一些举例:
//定义了三个变量
var a=3;
var b=4;
var c=5;
document.write((a>b)+"
");
document.write((a<b)+"
");
document.write(((a+b)>(b+c))+"
");
document.write((a<=c)+"
");
document.write((a>=c)+"
");
document.write((a==c)+"
");
document.write((a!=c)+"
");
document.write("
");
//定义两个变量
var m=100;
var n=200;
//定义变量reuslt接收结果值
var result=(m+n); //==,写成=,成赋值了(js不会把报错,var可以定义任何类型)
document.write("结果是:"+result);
//java语言:boolean
//int m = 100;
// int n = 200 ;
//boolean result = (m=n);
逻辑运算符的基本符号:
逻辑单与&:并列关系,多个条件同时满足
有0则0(有false则false,有一个满足不成立!)
逻辑单或|:多个条件只要满足一个即可成立
有1则1(有true则true,有一个满足则成立)
逻辑异或^:
相同则为false(0)
不同则为true(1)
逻辑非! :非true则fasle,非fasle则true
偶数个非是它本身
以下为一些举例:
//定义三个变量
var a=3;
var b=4;
var c=5;
//逻辑单与& (有0则0(有false则false)有一个满足则成立)
document.write(((a>b)&(a>c))+"
");//false & false
document.write(((a>b)&(a<c))+"
");//false & true
document.write(((a<b)&(a>c))+"
");//true & false
document.write(((a<b)&(a<c))+"
");//true & true
document.write("
");
//逻辑单或|(有1则1(有true则true)有一个满足则成立)
console.log(((a>b)|(a>c)));//false | false
console.log(((a>b)|(a<c)));//false | true
console.log(((a<b)|(a>c)));//true | false
console.log(((a<b)|(a<c)));//true | true
//逻辑异或^
document.write(((a>b)^(a>c))+"
");//false^false=0(false)
document.write(((a>b)^(a<c))+"
");//false^true=1(true)
document.write(((a<b)^(a>c))+"
");//true^false=1(true)
document.write(((a<b)^(a<c))+"
");//true^true=0(false)
document.write("
") ;
//逻辑非!
document.write(!(a>b)+"
");
document.write(!!(a>b)+"
");
var a=3;
var b=4;
var c=5;
//逻辑双与& (有false则false:和逻辑单与& 一样:共同点
document.write(((a>b)&&(a>c))+"
");//false && false
document.write(((a>b)&&(a<c))+"
");//false && true
document.write(((a<b)&&(a>c))+"
");//true && false
document.write(((a<b)&&(a<c))+"
");//true && true
document.write("
");
//逻辑双或||:有true则true
document.write(((a>b)||(a>c))+"
");//false||false
document.write(((a>b)||(a<c))+"
");//false||true
document.write(((a<b)||(a>c))+"
");//true||false
document.write(((a<b)||(a<c))+"
");//ture||false
document.write("
") ;
//定义两个变量x,y
var x=4;
var y=5;
document.write("x的值是"+x+"
");
document.write("y的值是"+y+"
");
document.write("
");
//逻辑与
//false & false
document.write((((++x)==3) & ((y--)==4)) +"
") ;
document.write("x的值是"+x+"
");
document.write("y的值是"+y+"
");
document.write("
");
var s=4;
var t=5;
//逻辑双与&&具有短路效果:
//左边的表达式如果false,则右边不执行!,可以提供运行效率!
// false || false
document.write((((++s)==3) && ((--t)==4)) +"
") ;
document.write("s的值是"+s+"
");
document.write("t的值是"+t+"
");
document.write("
");
var p=4;
var q=5;
//逻辑双或||:左边的表达式他如果是true,右边不执行!
document.write((((++p)==5) || ((--q)==5)) +"
") ;
document.write("p的值是"+p+"
");
document.write("q的值是"+q+"
");
带有一定逻辑判断
写法:(表达式)?执行true的结果:执行false的结果;
表达式无论简单还是复杂,结果是boolean类型,true或者false
以下为一些使用案例:
//案例一:有两个变量,比较两个变量的最大值
//定义两个变量
var a = 10 ;
var b = 25 ;
//(表达式)?执行true的结果:执行false的结果;
var max = (a>b)?a:b ;
document.write("两个数据的最大值是:"+max) ;
//案例二:有三个变量,比较三个变量中的最大值
//最常用的方式:采用中间变量的方式去操作
//1)将x和y进行比较,将它的结果给中间变量 temp
var temp = (x>y)?x:y;
//2)将1)步的结果和z进行比较
var max2 = (temp > z)?temp:z;
document.write("max2:"+max2) ;
console.log("max2:"+max2) ;
//案例三:比较两个数据是否相等
var m = 100 ;
var n = 100 ;
//(表达式)?执行true的结果:执行false的结果
//var result = (m==n)?true:false;
//优化
var result = (m==n);
document.write("result:"+result) ;
变量:数据在程序执行的过程中其值一直在改变
常量:这个数据本身不会发生改变
组成规则:
以"0B"开头,由0,1组成
逢二进一
早期使用机械原件的开和关表示数据的"信号"
组成规则:
以"0"表示开头,由0,1,2,3,4,5,6,7组成
逢八进一
在二进制的基础上,从右到左,每三个比特位为一组,左边不够的补0,最终计算出每一组数的十进制,然后从左到右将计算出的十进制组合起来,形成八进制
举例:
010 100 101
2 4 5 八进制:245
组成规则:
以"0X"开头,由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f组成
逢十六进一
在二进制的基础上,从右到左,每四个比特位为一组,左边不够的补0,最终计算出每一组数的十进制,然后从左到右将计算出的十进制组合起来,形成十六进制
举例:
0000 1010 0101
0 a 5 十六进制:0Xa5
任意进制转换10进制使用位权展开法,是将该x进制的每一位上的数字都乘以x^(该位所对应位数-1)
位权展开法:
系数*基数的权次幂相加
系数:就是每个位上数据的本身
基数:有x进制则基数就是x
权次幂:从右边往左边开始编号,从0开始
10进制转换到任意进制,是将十进制数除以该进制的进制数,并重复取余取商的步骤,所得到的商为取到0则继续除以该进制的进制数,最后将所得到的余数按取到的时间顺序反向排列,就能得到该任意进制数。
除基取余,一直到商为0,余数反转
以下为一些举例:
100的二进制转换:
2 | 100
2 | 50 0
2 | 25 0
2 | 12 1
2 | 6 0
2 | 3 0
2 | 1 1
2 | 0 1
转换后结果为:110 0100
100的八进制转换:
8 | 100
8 | 12 4
8 | 1 4
8 | 0 1
转换后的结果为:144
100的十六进制转换:
16 | 100
16 | 6 4
16 | 0 6
转换后的结果为:64
正数的原码、反码、补码都相同。
组成:最高符号位+数值位
原码:
最高符号位 数值位
0 0000111
反码:
最高符号位 数值位
0 0000111
补码:
最高符号位 数值位
0 0000111
负数:原码:最高符号位为1
反码:在原码的基础上,符号位不变,数值位按位取反。0——>1 1-->0
补码:在反码的基础上,符号位不变,数值位加一
原码:
最高符号位 数值位
1 0000111
反码:
最高符号位 数值位
1 1111000
补码:
最高符号位 数值位
1 1111001
计算机在对数据进行计算的时候,需要将这些数据进行"补码"操作
(原码--反码---补码:有符号的数据表示法)
考虑进制的概念:
进制:就是数据进位一种的方式
位运算符及其规则:
位与& :有0则0
位或| :有1则1
*位异或^:相同则为0,不同则为1
~:反码:全部按位取反,0变1,1变0
顺序结构语句:(最简单) javascript:代码由上而下依次加载
选择结构语句:if/switch
循环结构语句:for/while/do-while
if语句格式1:
if(表达式){
语句;
}
执行流程:如果表达式成立,则执行语句;否则不执行!
if语句格式2:
场景:针对两种情况判断
if(表达式){
语句1;
}else{
语句2;
}
执行流程:如果表达式成立,则执行语句1,否则,执行语句2。
if语句格式3:
if格式3:应用场景:针对多种情况判断
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
}else{
//上面都不匹配,执行else中语句
语句n;
}
执行流程:
先判断表达式1是否成立,成立则执行语句1,
如果不成立,继续判断表达式2是否成立,成立,则执行语句2,
如果都不成立,最终执行else中的语句;
switch格式
switch(表达式或者某个变量){
case 值1:
语句1;
break ;
case 值2:
语句2;
break ;
...
...
default:
语句n;
break ;
}
执行流程:
使用switch后面的变量值和case的值1进行匹配,
如果匹配,执行语句1,break语句结束;
如果值1不匹配,判断case后面的值2是否和switch后面的值进行匹配
如果匹配,则执行语句2,break语句结束;
如果也不匹配,...上面都不匹配,执行default的语句n,遇见break语句结束!
javascript中的switch
1)switch语句中case语句后面的值可以是常量,也可以是变量!
2)如果case语句中没有携带break语句,就会造成一种现象"case穿透"(灵活运用)
3)switch语句的结束条件: (重点)
1)遇见break结束 (break:跳转控制语句 中断/结束!)
2)程序默认执行到末尾
4)default语句可以在switch中的任何位置,不影响switch的执行流程
如果default在语句中,break不要省略
如果default在语句的末尾,break是可以省略的(建议不要省略!)
for循环的格式
for(初始化语句;条件判断语句;控制体语句){
循环体语句;
}
执行流程:
1)初始化语句对变量进行初始赋值(执行一次即可)
2)判断条件语句是否成立,如果成立,则执行循环体语句
3)执行控制体语句(步长语句)这个变量自增或者自减
4)判断条件是否成立,成立,继续执行循环体语句,
再次回到3)继续操作....
5)当条件表达式不成立,循环结束!
for(初始化语句1;条件表达式1;控制体语句1){
//循环体:for循环
for(初始化语句2;条件表达式2;控制体语句2){
循环体语句;
}
}
通用格式:
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;(步长语句)
}
执行流程:
1)初始化语句先执行,进行赋值
2)判断条件表达式是否成立,成立,执行循环体语句,执行控制体语句
3)继续回到2)过程...如果条件不成立,结束!
1)格式不同
for(初始化语句; 条件表达式;控制体语句){
循环体语句;
}
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;
}
2)内存角度考虑:优先使用for
for循环结束,里面的变量就会从内存中释放掉,节省内存资源
while循环结束,依然能访问这个变量,初始化语句在外面定义的
3)从应用场景:
明确循环次数使用for
不明确循环次数使用while
举例:
键盘录个字符串:给3次机会,判断用户是登录成功
开发中,优先使用for循环
初始化语句;
do{
循环体语句;
控制体语句(步长语句);
}while(条件表达式) ;
流程:
初始化语句赋值
执行循环体
控制体语句进行自增或者自减
判断条件是否成立,成立,继续执行循环体,不成立,结束!
循环体至少执行一次!
(开发中,用的很少)
底层源码使用多:js前端框架(Jqeury)
后端语言:java语言(面向对象)
集合/后面常用类的方法中见到源码:涉及到do-while
for的死循环:
for(;;){
循环体语句
}
while的死循环:
while(true){
完成逻辑
产生一个随机数
键盘录入数据,
判断数据大了,还是小了
如果相等,退出循环 break ;
}
//猜数字游戏
//产生一个1-100之间的随机数
var num=(Math.floor(Math.random()*100 +1));
//alert(typeof(num));
//定义统计变量
var count=0;
//当不明确循环次数,都是while循环
while(true){
//统计变量++
count ++;
//键盘录入
var guessNum=prompt("请您输入一个数据:");
/* if(guessNum=="" || guessNum==" "){
alert("请输入数值类型的数据") ;
} */
//string--number
guessNum = parseInt(guessNum);
//如果猜的数字大于随机数
if(guessNum > num){
alert("您要猜的"+guessNum+"大了");
}else if(guessNum < num){
alert("您要猜的"+guessNum+"小了");
}else{
alert("恭喜您,第"+count+"次,猜中了");
//结束循环
break; //中断
}
}
(和Java中定义变量命名规范同理)
javascript定义变量 (命名需要做到见名知意)
注意事项:
1)变量名不能以数字开头
2)变量名不能有空格出现,以及特殊符号
3)不能是关键字 var/true/false...
4)可以是26个英文大小字母(不区分大小写)或者数字
5)可以有_或者$符号,他们可以开头
break:中断,结束的意思
不能单独使用
两个场景中使用:
1)switch语句,本身格式就携带break
2)循环语句中使用
for循环嵌套:
break以前的语法:后面可以跟上标签语句
给循环语句的前面起一个名字 名称:for()
break 名称;
wc:for(var i = 0 ; i < 5 ; i ++){//行数
nc:for(var j = 0 ; j < 5 ; j++){//列数
/* if(j==2){
break nc ; //结束内层循环
} */
if(j==2){
break wc; //结束外层循环
}
document.write("*");
}
document.write("
");
}
continue:继续的意思(结束当前循环,立即进入下一次循环)
不能单独用
不能脱离循环语句(loop)中使用!
return 一般在函数(方法中使用)
return:结束一个函数(方法),或者程序
不能单独用!
引入举例:玩游戏植物大战僵尸,豌豆芽发射炮弹可能需要书写100行代码来完成,每一个关卡都有豌豆芽发射炮弹动作,每一个关卡中都需要是这100行代码,代码冗余大(重复性大),提供代码的复用性,就将100行代码,放在{}里面,并且为{}起名字---函数名(方法名),以后只要见到豌豆芽发射炮弹,直接去调用这个函数名即可!
函数名以及变量名:遵循小驼峰命名法
单个单词:字母全部小写
多个单词:第一个单词全部小写,从第二个单词开始首字母大写,其余小写
在js中定义函数的格式:
function 函数名(参数名1,参数名2,....){
完成的函数的逻辑
return 结果; //返回结果
}
赋值调用:
var 变量名=函数名(实际参数1,实际参数2..)
单独调用:
函数名();
完成函数定义的心里明确:
1)这个函数有没有返回结果;
2)考虑参数的数据类型以及参数个数
1)定义函数的时候,形式参数上不能携带var
2)函数定义的格式不能省略{},否则不是一个函数,浏览器中js引擎是无法识别的
3)如果这个函数没有返回结果,那么赋值调用的是undefined(未定义)
4)无论任何语言中,有右括号的地方不能有分号,否则函数是没有"函数体",没有函数体的方法是没有意义的
函数不调用就不执行
函数与函数之间是平级关系,不能嵌套使用
函数的编写顺序和执行顺序无关
可以存储多个同一种类型元素的一个容器!
在javascript语言中,数组可以存储不同类型的元素,
但是开发中,数组存储的必须为同一类型的元素!
Js中本身就存在一个Array内置数组对象
固定格式:
(动态初始化:不给定元素)
var 数组名称 = new Array();//不指定长度
var 数组名称 = new Array(size); //指定数组长度
(静态初始化:给定具体元素)
var 数组名称 = new Array([元素1,元素2,...]);
可以简写为
var 数组名= [元素1,元素2,...];
数组的属性:length (长度)
使用方式:数组名称.length
数组名称[角标值或者索引值]
索引值从0开始,数组的最大索引值=数组长度-1
//创建一个数组
var arr=new Array(5);//5个长度
//键盘录入5个数据,将这个5个数据放在数组中,进行遍历(遍历数组使用函数改进)
for(var i=0;i<5;i++){
arr[i] = prompt("请输入数组元素:");
//alert(arr[i]);
}
//alert(arr.length);
document.write("调用函数进行遍历:");
//按照 输出 :[元素1, 元素2, 元素3 ....元素n]
//调用下面的函数
printArray(arr);
//已知数组,获取数组中的最大值
var arr=[20,13,24,56,44];
//定义一个参照物,认为它就是最大值
var max = arr[0];
//遍历后面角标对应的元素(一一获取)
for(var i=1;i<arr.length;i++){
//判断:如果后面的元素都比max大,参照物arr[0]就不是最大值
if(arr[i]>max){
max=arr[i]; //将后面的元素赋值给max
}
}
document.write("数组中的最大值是:"+max);