第一天JS的介绍
1、JS是运行在浏览器端的解释型弱类型的面向对象脚本语言
一、语言
1、编译型:
在程序执行之前,需要先检查语法是否正确,不正确就不运行
2、解释型:
在程序执行之前,不需要检查语法的正确性,碰到错误程序之后停止运行
3、强类型:
变量保存的数据是由数据的类型决定的
4、弱类型:
变量的保存是随意的
二、JS的使用
1、外部引用
<script src="js的路径"> </script>
2、内部用
<script> </script>
3、输出方式(三种)
控制台输出:
console.log();
弹窗输出:
alert("提示文字 ");
日志输出:
document.write(输出);
变量:程序员自定义的变量
变量名不能是关键字:
多个变量的创建:
var 变量名1=值1,变量名2=值2....变量名n=值n ;
常量的创建:
const 常量名=值;
boolean-布尔:false和true取值;
********** +运算(特殊):若遇到字符串,则两边都会转化为字符串,此时为拼接操作,不再是做+运算
比较运算符中:结果一定是一个布尔值:true或者false
********** 特殊:如果参与比较的两边都是字符串,则会按位比较
数字:0-9 < 大写字母:A-Z < 小写字母:a-z < 汉字
+=是累加的意思;
前++和后++的区别:
1、单独使用是没有区别的
2、参与其他运算:变量始终为1;
前++和后++的返回值不同,前++返回的是加了之后的新值,后++返回的是加了之前的旧值。
用户输入框:var 变量=prompt("提示文字");
第二天--分支结构
switch..case:循环
语法:
switch(变量/表达式){
case:
操作;
break;
case:
操作;
break;
default:默认操作;
}
if(变量/条件){
操作;
}else{
操作;
}
三目运算:
简化代码,但是只能完成简单的操作
语法
条件?操作1:默认操作;
条件1?操作1:条件2?操作2:默认操作
parseInt(需要转换的数据):整型强转,不认识小数点
parseFloat():浮点型强转,认识第一个小数点
执行原理:从左向右依次转换:遇到不认识的就停止,一开始就不认识的就显示NaN;
第三天--循环结构
while循环:直到条件不满足才会跳出循环
语法:
var 循环变量=某某;
while(循环条件)
{ 循环体;
循环变量变化;}
**************特殊:
1、需要用到死循环时候多数用while循环
2、不确定需要循环的次数时使用死循环
break;退出的所有的循环
continue;退出本次循环,并不会退出所有的循环
随机整数的公式:
var r=parseInt(Math.random()*(max-min+1)+min);
for循环:
for(var 循环变量=某某;循环条件;循环变量变化) { 循环体;}
第四天函数的创建
函数的基础:
函数的创建:
1、声明方式创建函数
function 函数名()
{
return 返回值/结果;
}
2、直接量方式创建函数
var 函数名=function(形参列表)
{
操作;
return 返回值/结果;
}
调用:
var 变量(接住函数返回的结果)=函数名(实参列表);
作用域:
全局作用域:
定义或者获取的全局变量可以在页面的任意位置使用
局部作用域:
在函数内部调用时可用,优先使用局部变量,局部变量没有时,在全局变量找
************局部可以用全局变量,而全局不能用局部的,除非局部使用return将值返回到全局
对未声明的变量进行直接赋值会导致全局污染--全局本身没有这个值,但是被加上了。
声明提前:--会在笔试题中出现
规则:在函数执行之前,会将var声明的变量(轻)和function声明的函数(重)提前,var在function的上面,但是赋值会留在原地;
使用声明方式创建的函数会全部提前,而用量方式创建的函数只有变量名部分会提前
重载:用arguments解决JS不支持重载的问题
固定套路:
1、通过下标去获取传入的某个实参:arguments[i]---i是下标,从0开始数;
2、通过length去获取传入实参的个数:arguments.length
数组:
创建数组:
1、直接量方式:
var arr=[];
var arr=[数据];
2、构造函数方式
var arr=new array();
三个固定套路:
1、向末尾添加元素:
arr=[arr.length]=新数据;
2、获取数组的倒数第几个元素
arr[arr.length-n];
3、缩容:删除倒数n个元素
arr.length=n;
遍历数组:
固定公式:
for(var i=0;i<arr.length;i++){
arr[i];
}
第五天--DOM概念
获取元素;
1、通过ID:
var elem=document.getElementById("id值");
2、通过标签:
var elems=document/parent.getElementByTagName("标签名");
3、*************通过class名
var elems=document/parent.getElementsByClassName("calss名");
特殊:
1、返回的是一个类数组对象/集合,有下标也可以遍历;
**************一个集合是不能直接做操作的,要么拿到具体的下标,要么遍历拿到每一个
重点
通过关系去获取元素,前提已经找到一个元素
父:elem.parentNode;单个元素
子:elem.children;集合
第一个儿子:elem.firstElementChild;
最后一个儿子:elem.lastElementChild;
前一个元素:elem.previousElementSibling;
后一个元素:elme.nextElementSibling;
内容:
*********innerHTML---内容识别标签
获取:elem.innerHTML;
设置:elem.innerHTML="新内容";
innerText----识别标签,只认识纯文本
获取:elem.innerText;
设置:elem。innerText=“新内容”;
value--单标签也能书写内容
获取:input.value;
设置:input.value="新内容";
属性:
获取属性值:elem.getAttribute(“属性名”);
设置属性值:elem.setAttribute("属性名");
在自定义属性时候,需要用到这个
简化版
elem.属性名
elem.属性值
简化版的缺陷:class为关键字,需要写成calssName
简化版不能操作自定义属性
样式获取;elem.style.css属性名;
设置样式:elem。style。css属性名=“css属性值”;
特殊点:css属性名中,有横线的需要去掉横线改成小驼峰命名法
例如:border-radius-->borderRadius
只能获取内联样式
绑定事件
elem.事件名=function(){ 操作; }
超重点:
关键字:this--->这个,当前
多个元素绑定的时候,需要点击某一个而产生某种效果 需要用这个判断。