# js第一周

69 阅读6分钟

#第一天

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--当前触发事件的元素,只能在事件中使用