#第一天
1.使用方法 :<script>语法<script>,<script src="../js"<script>
2.检测错误 :打桩输出 console.log
3.声明变量 : var 变量名=值 不能以数字开头,不能关键字,建议驼峰命名法
4.数据类型 :1.number 2.string 3.boolean 4.null 5.undefined
5.运算符 : + - * / %
自带隐式转换 默认两边转换为数字再运算
+号 当任意一边为字符串时,变成拼接
ture-1 false-0 undefined-NAN null-0 "1000"-1000
NAN 不是一个数字 判断:isNAN() 参与任何运算都是nan、参与任何比较都是false
6.赋值运算 : = += -= *= /= %=
例如a+=b----a=a+b
7.逻辑运算符:&&与 ||或 !非
8.自增自减:++ --
++a 先赋值,再自加 a++ 先自加再赋值
9.用户输入框:prompt("")
#第二天
1.程序流程: 1.顺序结构、 2.分支结构、3.循环结构
2.if...else分支: 1.if、2.if...else、if..else if...else
3.swithc...case 分支:语法:switch(变量、表达式){ case 值1:操作一 case 值1:操作一 case 值1:操作一;; }
特殊:默认只要一个case满足后,会将后续所有操作全部完成可在每个case后加break;
多个条件操作是一样的可以不加break
case在做比较时不带有隐式转换的
default 可以省略不写,但是不推荐
switch和if的区别:
s效率高,是等值比较
if是范围查找,执行效率慢
4.三目运算
条件1?操作1:默认操作
条件1?操作1:条件2?操作2:默认操作
5.强制(显示)数据类型转换
转字符串:x.toString、s=String(x)
转数字:
parseint() 从左往右依次读取遇到非数字字符停止,一开始就不认识为NAN
parseFloat(str) 专门讲字符转化为小数,只认识第一个小数点,原理同上
number() 万能的,将任何转为数字 完全等效于隐式转换
转布尔:Boolean(x) 万能 可以将任何转化为布尔,完全等效于隐式转换 !!x
只有留个为false :0,"",undefined,NAN,null,false 其余都为true
#第三天
1.循环三要素:循环条件 循环体 循环变量
2.三种循环:
while循环 while(条件){ 循环体;循环变量变化}
while(true、1)死循环 break结束循环 continu 退出本次循环 继续下一循环
for循环:
for(var i=0; i<=100;i++){ 循环体}
特殊: for(;;){} 死循环
面试题:for和while的区别
不确定次数用while 确定次数用for
随机整数公式:parseint(Math.random()*(max-min+1)+min)
3.函数的基础
function 函数名(型参,型参){函数体/代码段}
函数不会立马执行,需要调用
调用:函数名(实参,实参) 实参顺序不能乱要一一对应
注意:循环几乎是一瞬间完成的,函数需要调用才会执行
#第四天
1.自定义函数:
function:函数名(型参,型参){ 操作、return返回值}
var 函数名=function(型参,型参){ 操作、return返回值}
2.调用函数: 、 var 一个变量=函数名(型参,型参)
return 本意是退出函数 后面的内容不再执行,将数据返回到函数作用域的外部,只负责返回不负责保存,需要用变量接住
3.作用域:
全局作用域:全局变量和全局函数,在页面任何位置都可以使用
函数作用域:局部变量局部函数,在当前函数调用时,内部可以用
全局污染: 全局本身没有这个东西,但是在函数中声明了就会被添加上
局部变量可以使用全局,但是全局不能使用局部
4.声明提前
规则:在程序正式执行之前,将var声明的变量(最前面)和function声明的函数(次之)都会悄悄的集中定义在作用域顶部,但是赋值会留在原地
声明方式创建的函数会被完全提前
直接方式创建的函只有变量部分会提前
5.重载:相同的函数名 根据传入实参的不同,自动选择对应的函数去执行 但是js并不支持函数名重复,所以后面的会把前面的覆盖
解决:在函数内部自带的一个arguments的对象(类数组对象),它可以接住所有的实参默认长度为0
固定套路:
通过下标去获取传入的某一个实参,arguments[i] i从0开始
通过length去获取到底传入了几个参数,arguments.length。通过判断传入实参的不同,在内部去判断,从而变相实现重载
6.数组基础: 获取数组的元素 数组名[i]
添加替换元素 数组名[i]=新数据,如果下标没有元素为添加,有为替换
数组三大不限制:
不限制元素类型、不限制数组长度、不限制下标越界
获取元素时,下标越界,返回undefined 添加时,下标越界,得到一个稀疏数组,遍历会得到很多undefined
三个固定套路
向末尾添加元素:arr[arr.length]=新数组;
获取数组的倒数第几个元素: arr[arr.length-n];
缩容:删除倒数n个元素:arr.lenngth-=n;
遍历数组
for(var i=0;i<arr.length;i++){ arr[i]}
#第五天
1.Dom :会将页面上的每一个元素,属性,文本,注释等,视为一个Dom元素、节点、对象
2.查找元素
通过id查找 document.getElementById("id值")
特殊:找到返回dom,没有返回null、如果出现多个相同的id,只会找到第一个
通过标签class查找元素:document.getElementclassName("class名")
特殊:找到返回第一个类数组dom集合,没有返回空数组集合,js只能直接操作dom元素,不能直接操作dom集合---要么下标拿到某一个,要么遍历拿到每一个,不一定要从document开始,也可以是某个父元素
通过标签查找:document.getElementTagName("标签名")
3.通过关系获取元素
父元素:elem.parentNode 一个元素
子元素:elem.children 一个集合
第一个子元素:elem.firstElementchild 单个元素
最后一个子元素:elem.lastElementchild 单个元素
前一个兄弟:elem.previousElementSibling 单个元素
后一个兄弟:elem.nextElementSibling 单个元素
4.操作元素--先找到
elem.innerHTML 获取和设置开始和结束标签之间的内容,支持识别标签
获取: elem.innerHTML 设置:elem.innerHTML="新内容"
elem.Text 获取和设置开始和结束标签之间的纯文本内容,不支持识别标签
获取: elem.Text 设置:elem.Text="新内容"
input.value 专门获取input里的内容 获取: input.value 设置:input.value="新内容"
属性:
获取属性:elem.getAttribute("属性名") 简化:elem.属性名
设置属性值:elem.getAttribute("属性名","属性值") 简化:elem.属性名="属性值"
缺点 class变成了className class变成关键字,不能操作自定义属性
5.操作样式: 获取样式:elem.style.css属性名
设置样式:elem.style.css属性名="css属性值"
特殊:css属性名,有横线的地方 去掉横线 变成小驼峰命名法
缺点:获取时,我们只能获取内联样式
6.绑定事件:、
elem.on 事件名=function(){ 操作} 可加循环遍历
7.关键字:this
如果单个元素绑定事件,this--这个元素
如果多个元素绑定事件,this--当前触发事件的元素,只能在事件中使用