day1
JaveScript:简称js,是一个运行在js解释器中的一个解释型弱类型面向对象脚本语言
如何使用: 引入方法(2种): 1.在html中书写一个script标签 2.创建一个xx.js文件,在html中引入 把js放在html和css的后面
找错方法(3种): 1.console.log() 在控制台输出 2.document.write() 在页面山输出 3.alert() 用警告框输出
变量:一个值可以发生变化的数据 语法:var 变量名=值;
常量:一旦创建后,值不允许被修改了 语法:const 常量名=值;
算术运算符:+ - * / % %作用:判断奇偶性,num%2 如果结果为0说明为偶数,如果结果为1说明为基数
特殊: 1.算术运算符具有隐式转换,默认:都是转为数字再运算,如果+运算碰到了一个字符串,那么两边都会转成字符串,变成一个拼接操作 2.字符串可以转为数字,但是必须是一个纯数字组成的字符串,但凡包含了一个非数字字符,则为NaN
数据类型: 原始/基本/值类型:5个 string-字符串 number-数字 boolean-布尔 undefined null-空
day2
数据类型的转换
1.隐式转换 【一切的页面上获取来的数据类型都是字符串】
算术运算符具有隐式转换
默认:都是转为数字再运算
特殊:
不管是什么运算,只要没碰上字符串,都会转为一个数字
true->1
false->0
undefined->NaN
null->0
防止用户恶意输入(只能防止用户输入的必须是一个数字)
!isNaN(x)
true->说明是一个有效数字
false->说明是一个NaN
2.显式转换 也叫做强制转换
如何使用:
1.转为字符串 var str=xx.toString();//xx不能是undefined和null
2.转为数字:3种
parseInt(x); 不认识小数点
parseFloat(x); 人是第一个小数点
这样可以去掉单位
3.Number(x)
2.Function:自定义函数,也称之为方法
创建函数
function 函数名(){
代码段;
}
调用函数
1.直接在js中写几次调用,就会执行几次操作
函数名();
2.用户自己触发:
<elem onclick="函数名()”></elem>
带参数的函数
语法:
function 函数名(形参,...){
函数体;
}
调用:实参:实际参数 函数名(实参,...);
特殊:实参的个数以及顺序 和 形参的个数以及顺序都要一一对应
普通函数:操作永远是固定的 带参数的函数:根据传入的实参,执行略微不同的操作
分支结构
逻辑运算符:
&&:与(并且):全部条件都满足,结果为true
只要有一个条件不满足,结果为false
||:或:全部条件都不满足,结果为false
只要有一个条件满足,结果为true
!:颠倒布尔值
分支的语法 1、一个条件一件事,满足就做,不满足就不做 if(条件){ 操作 }
2、一个条件两件事,满足就做第一件,不满足就做第二件 if(条件){ 操作; }else{ 默认操作; }
3、多个条件多件事:满足谁就做谁 if(条件1){ 操作1; }else if(条件2){ 操作2; }else if(条件3){ 操作3; }else{ 默认操作; }
day3
循环结构
解决:循环结构:反复执行相同或相似的代码
循环三要素: 1、循环条件:从哪里开始,到哪里结束 2、循环体:操作-要做什么事 3、循环变量、变量还要变化
1、while循环
语法: var 循环变量=几; while(循环条件){ 循环体; 循环变量变化; }
死循环: while(true){ 循环体; }
往往死循环还要搭配上,退出循环语句:break;
for循环:执行原理跟while一模一样
for(循环变量的创建;循环条件;变量的变化){ 循环体; }
死循环:for(;;){操作}
数组
每个元素都有一个唯一的位置序号,称之为【下标】:从0开始,到最大长度-1
创建数组:2种 1、直接量方式:var arr=[];//空数组 var arr=[元素,...];
2、构造函数方式:var arr=new Array();//空数组 var arr=new Array(元素,...);
访问/获取:获取出数组中的某个元素 数组名[下标]
添加/覆盖: 数组名[下标]=新元素; 特殊: 1、下标处没有元素,则为添加 2、下标处有元素,则为覆盖/替换
数组的三大不限制: 1、不限制元素的类型 2、不限制元素的个数 3、不限制下标越界 获取时 - 下标越界,返回undefined 添加时 - 下标越界,会变成稀疏数组,导致下标不连续
数组有一个唯一的属性:数组名.length; - 获取到数组的长度
三个固定套路: 1、向末尾添加元素:arr[arr.length]=新元素; 2、获取倒数第n个元素:arr[arr.length-n]; 3、缩容:删除末尾n个元素:arr.length-=n;
遍历数组:将数组中的每一个元素取出来执行相同或相似的操作; 公式: for(var i=0;i<arr.length;i++){ arr[i];//当前次元素 }
day4
查找元素
1、通过 HTML 特性去查找元素
通过ID查找元素: var elem=document.getElementById("id值");
通过标签名查找元素: var elems=document/parent.getElementsByTagName("标签名");
特殊: 1、返回的结果:不是一个DOM元素/节点/对象,是一个DOM集合,是不能直接用于做任何操作的 解决:要么用下标拿到某一个,要么用遍历拿到每一个 2、parent:找到的某个父元素
通过class名查找元素: var elems=document/parent.getElementsByClassName("class名");
2、通过关系获取元素:前提:至少要先找到一个元素: 父元素:elem.parentNode; - 单个元素 子元素:elem.children; - 集合:集合不能直接做操作 第一个儿子:elem.firstElementChild; 最后一个儿子:elem.lastElementChild; 前一个兄弟:elem.previousElementSibling; 后一个兄弟:elem.nextElementSibling;
单个元素找到的就是单个元素,但是没找到是null
多个元素找到了是一个集合,但是没找到是[];
操作元素:
内容: 1、innerHTML:获取 或 设置元素的内容部分,并且能够识别标签 获取:elem.innerHTML; 设置:elem.innerHTML="新内容";
2、innerText:获取 或 设置元素的文本部分,不能识别标签 获取:elem.innerText; 设置:elem.innerText="新文本";
3、value:获取 或 设置input的内容部分 获取:input.value; 设置:input.value="新文本";
属性: 1、获取属性值:elem.getAttribute("属性名"); 简化版:elem.属性名;
2、设置属性值:elem.setAttribute("属性名","属性值"); 简化版:elem.属性名="新属性值";
样式:
获取:elem.style.css属性名; 设置:elem.style.css属性名="css属性值";
绑定事件:
单个元素: elem.onclick=function(){ this->就是绑定事件的这个元素 }
多个元素: for(var i=0;i<elems.length;i++){ elems[i].onclick=function(){ this->是当前触发事件的元素 } }
day6
数据类型转换
强制转换:3类
1、转字符串: 1、x.toString(); 2、String(x);
2、转数字: 1、parseInt/Float(str); 2、Number(x);
3、转布尔: Boolean(x); 只有6个会为false:0,"",undefined,null,NaN,false,其余都为true
2、隐式转换:都是出现在运算符之中
运算符和表达式:
1、算术运算符:+ - * / %
2、比较运算符:> < >= <= == != === !==
3、逻辑运算:
短路逻辑:如果前一个条件,已经能够得出最后结论了,则不看后续
&&短路:如果前一个条件满足,才执行后续操作,如果前一个条件不满足,则不管后续操作
一个条件一件事满足就做,不满足就不做 if(){} 操作只能有一句话
条件&&(操作);
||短路:浏览器兼容:二选一操作
e=e||window.event;
位运算:
左移:m<<n,读作m左移了n位,翻译:m*2的n次方
右移:m>>n,读作m右移了n位,翻译:m/2的n次方
底数只能2
赋值运算:+= -= *= /= %= 一个操作两件事,先计算,再赋值回去
i++;//递增:每次只会固定+1
i+=1;//累加:每次+几自己决定
三目运算:简化if...else 简化if...else if...else 语法: 1、条件?操作1:默认操作;
2、条件1?操作1:条件2?操作2:条件3?操作3:默认操作;
特殊: 1、只能简化简单的分支 - 操作只能有一句话 2、默认操作不能省略