前面学习了html和css,总的来说难度一般,但这周开始学习js,难度系数翻倍了,刚开始听的懵懵懂懂,也许是因为要过春节了没怎么听进去,思路也理不清,所以我春节都没再打开过电脑好好的玩到了初三,但心里觉得再不学习就没时间了。从初四开始恶补,十来天没学习忘的都差不多了,今天再看讲课视频的时候思路感觉好清晰,看老师写一遍,再自己跟着老师写一遍,最后再自己写一遍,思路明确,感觉没年前那么吃力了,这或许就是张无忌练的乾坤大挪移吧,需要忘记所有,才能突破自己。
js的基础
1. 概念
js是运行在JavaScript解释器或者特定引擎中的解释型、弱类型面向对象的脚本语言。
2. 调试语句
在控制台输出 console.log()
在页面上输出 document.write()
弹出框显示 alert()
3.变量
语法:var 变量名=值
4.常量
语法:const 常量名=值
注意事项:
常量名一旦初始化就不允许被修改
5.算术运算符
加、减、乘、除:+、——、*、/
以上四种算术符号和正常的加减乘除运算一样
取余,俗称模%
可以用于判断奇偶性
6.隐式转换
常理来说只有数字才能参与算术运算,但其实字符串也可以,默认运算符左右两边都会悄悄的变成一个数字再运算
特殊点:
a.+运算:只要碰上一个字符串,左右两边都会变成字符串,+运算就会变成拼接字符
b.加减乘除运算,有字符串也可以转成数字,但必须是纯数字的字符串,只要包含了非数字字符,结果就会为NaN
7.js的基本数据类型
a.string---字符串,取值有无限个,双引号或单引号里面的一定是字符串
b.Number---数字,取值有无限个
c.Boolean--布尔,取值只有两个,true或者flase,多半用于判断比较
d.Undefined,取值只有一个 ,没有任何作用
e.Null,取值只有一个,可以释放变量节约内存空间
8.分支结构
a.一个条件一件事,满足就做不满足就不做
if(条件){操作}
b.一个条件两件事,谁满足就谁做
if(条件){操作}
else{操作}
c.多个条件多件事,满足谁就做谁,都不满足则执行else的操作
if(条件){操作}
else if(条件){操作}
else if(条件){操作}
else{操作}
9.函数
创建函数:function 函数名(){ 代码段 }
调用:
a.直接在js里面写函数名(),程序员写几次就会执行几次
b.绑定在页面元素上,让用户输入触发,用户触发一次就会执行一次
<button onclick="函数名();"></button>
带有参数的函数:
function 函数名(形参){函数体}
形参:就是一个变量名,只不过这里不需要var,并没有保存真正的值,形参可以有多个,用逗号隔开
调用带参数的函数:
a.函数名 (实参){}
一个函数可以执行相似的操作
例:实现两数相加
function add(a,b){conlose.log(a+b)}
add(1,2) 输出结果为3
add(5,6)输出结果为11
总结:
a.如果函数体事固定不变的,则不需要使用带参数的函数
b.如果函数体希望根据传入的实参不同,做的事也略微不同,则需要使用带参数的函数
10.循环
a.while循环
语法: var 循环变量=几;
while(循环条件){循环体;循环变量的变化;}
b.for循环
语法:for(var 循环变量=几;循环条件;循环变量的变化){ 循环体 }
总结:while循环一般用于循环次数不明确的情况下,for循环一般用于已经明确循环次数的情况
11.数组
概念:一个变量可以保存多个数据
下标:数组中的每个元素都有一个唯一的位置序号,用来表示数组中的内一个元素,从0开始到最大长度-1结束
创建:
a.直接量方式
var arr[元素、元素、元素。。。。]
b.构造函数方式
var arr=new Array(元素、元素、元素、元素);
访问数组中的元素:数组名[下标]
添加/修改数组中的元素:数组名[下标]=新元素
数组中唯一的一个属性:length
三个固定方式:
1.向数组末尾条例加元素:
arr[arr.length]=新值
2.获取倒数第n个元素
arrp[arr,length-1]
3.删除数组中的倒数n个:
arr.length-=n或arr.length=arr.length-n
遍历数组
for(var i=0;i<arr.length;i++){
arr[i]
}
12.元素查找
A.通过HTML的特点去查找元素:
a.id查找
var elem=document.getElementById('id名')
b.标签名查找:
var elems=document.getElementsByTagName('标签名')
c.class查找:
var elems=document.getElementByClassName('class名')
B.节点之间的关系进行查找:
父:elem.parentNode //单个元素
子:elems.children //单个元素
第一个儿子:elem.firstElementChild
最后一个儿子:elem.lastElementChild
前一个兄弟:elem.previousElementSibling
后一个兄弟:elem.nextElementSibling
13.操作元素
<标签名 属性名="属性值" style="样式">内容</标签名>
1.内容
a.innerHTML属性:
获取:elem.innerHTML
设置:elem.innerHTML="新内容"
b.innerText属性:
获取:elem.innerText
设置:elem.innerText="新内容"
c.value属性:
获取:input.value
设置:input.value="新内容"
2.属性
方式一:
获取:elem.getAttribute("属性名")
设置:elem.setAttribute("属性名","属性值")
此方式可以识别自定义属性
方式二:
获取:elem.属性名
设置: elem.属性名="属性值"
3.样式
获取:elem.style.css属性名;
设置: elem.style.css属性名="css属性值"
4.元素绑定事件
单个元素:elem.onclick=function(){操作}
多个元素:for(var i=0;i<arr.length;i++){
arr[i].onclick=function(){操作}
}
总结:一切的获取都是为了判断,一切的设置都是为了修改,千万不要对一个集合做操作,要么遍历拿全部,要么下标拿一个