js概念
js:JavaScirp 运行在js解释器的解释性弱类型面向对象脚本语言
特点
- 代码可以用任何编辑器编写
- 解释型:不需要检查对错,直接运行,碰到错误会停止
- 弱类型语言:由数据决定数据类型 强类型语言:由数据类型决定要保存的数据
- 面向对象语言
使用
放置在html最后(js比较耗时,后续会使用js操作html)
- 外部引入.js文件
- 内部使用
js使用
注释
//
输出
1. console.log()
2. document.write()
3. alert()
变量
语法:var 变量名=值;
作用:
- 经常使用的数据,提前保存
- 数据可以被修改
注意:
- 变量名设置:不能以数字开头,不能使用关键字,尽量见名知意
- 创建后可以不进行赋值,默认undefinede
- 创建多个变量时,可以省略中间的var,将分号变更为逗号
- 可以省略关键字var,但是会导致全局污染
- = 赋值
常量
语法:const 常量名=值;
注意:常量一旦创建,不可以被修改
数据类型
原始/基本/值类型
Number 数字,取值:无数个
String 字符串,取值:无数个
Boolean 布尔值,取值:2个-true,false
Undefined 变量的默认值,取值:undefined
Null 空,取值:null
引用/对象类型
算数运算符
+ - * / %
数据类型转换
隐式转换
算式运算符具有隐式转换
1.+运算:碰上字符串的时候,会变为拼接操作
2.- * / % 纯数字字符串会转为数字进行计算
3.true->1 flase->0 undefined->NaN null->0 "100"->100 "100px"->NaN
4.NaN:Not A Number 不是一个数字,但是是Number类型
NaN参与任何算术运算,结果都为NaN;NaN参与任何比较/关系运算,结果都为false
解决:!isNaN() 判断是不是有效数字
作用:检测用户输入的是否是一个有效数字
结果:true -> 有效数字 false -> NaN
显示/强制转换
转字符串 xx.toString(); 不支持undefined/null
转整数 parseInt(str/num); 从左到右依次读取至非数字字符
转小数 parseFloat(str);
万能用法 Number(); 相当于隐式转换
函数
概念
函数Function是一段被预定义好的,可以反复使用的代码。是一个独立的功能体,可以放入若干代码
语法
function name(){
函数体
}//创建
name(); //调用:可以绑定在页面元素上,由用户触发
可以放在函数之中的内容:
1.不希望打开页面立即执行,等用户触发
2.不希望只执行一次,可以反复触发
3.本身就是一个独立的功能体
含参的函数
function name(形参,....){//形参:形式参数,一个不需要var的变量
函数体
}//创建
name(实参,...);//调用
注意:
1.传入的实参顺序要和形参顺序对应
2.函数不一定必须由参数:若操作固定,则不需要传递参数;若根据传入参数不同,做的操作也略微不同,则需要添加参数
结构
程序的结构
顺序结构:默认结构,从上到下依次执行
分支结构:根据判断条件,选择一部分代码去执行
循环结构:根据判断条件,选择是否重复执行一段代码
运算符
比较/关系运算符
< > >= <= == !=
常用于循环、分支的判断条件
结果:ture / false
逻辑运算符
&& 与/并且
只有全部条件为ture,最后结果才为true
只要有任一条件为false,最后结果则为false
|| 或
只有全部条件为false,最后结果才为false
只要有任一条件为true,最后结果都为ture
! 非
!true -> false
!false -> true
分支
if结构
一个条件一件事,满足就做,不满足就不做
if(判断条件){
操作
}
一个条件两件事,满足完成第一件,不满足完成第二件
if(判断条件){
操作1
}else{
操作2
}
多个条件多件事,满足哪个就完成哪个
if(条件1){
操作1
}else if(条件2){
操作2
}else if(条件3){
操作3
}else{
默认操作
}
注意:
1.else结构可以不写,但若前面所有条件分支都不满足,则所有分支无效
2.条件有顺序性,因为分支只会走一条路
循环
反复执行相同或相似的操作
循环的三要素:循环条件 循环体(循环的操作) 循环变量
while
var 循环变量=几;
while(循环条件){
循环体;
循环变量的变化;
}
执行原理:先判断循环条件,若条件为真,则执行【一次】循环体;然后继续判断,若条件仍为真,则再执行【一次】循环体;直至判断条件为假则结束
注意:循环是一次一次执行的
for
for(var 循环变量=几;循环条件;变量的变化){
循环体;
}
注意:一次可创建多个循环变量
死循环
while(true){循环体;}
for(;;){循环体;}
break 循环退出语句
数组
概念
-
多个元素/数据组成的一个集合,保存在一个变量中
-
数组中的元素都是按照线性顺序来排列的:除第一个元素,每个元素都有唯一的前驱元素;除最后一个元素,每个元素都有唯一的后继元素
-
数组中的每个元素都有唯一的位置序号,称下标。用来表示数组中的每个元素 下标从0开始,到最大长度-1
创建数组
直接量方式
var arr=[];//空数组
var arr=[数据1,数据2,...];
构造函数方式
var arr=new Array();//空数组
var arr=new Array(数据1,数据2,....);
访问数组
获取数据
语法:数组名[下标];
注意:若下标越界,则会获取一个undefined
添加数据
语法:数组名[下标]=新数据;
注意:
1.若下标处已有数据,则为替换操作
2.若下标越界,会让数组变为稀疏数组,中间会产生很多undefined,且下标不再连续
数组属性:数组对象
数组名.length 获取到数组的最大长度
向末尾添加元素:arr[arr.length]=新值
获取倒数第n个元素:arr[arr.length-n]
删除末尾的n个元素:arr.length-=n
遍历数组
将数组中的每个元素都提取出来进行相同或者相似的操作
for(var i=0;i<arr.length;i++){
arr[i]
}
js组成
JavaScript=ECMAScript+DOM+BOM
ECMAScript 核心语法
DOM:Document Object Model(文档对象模型) 操作文档
BOM:Browser Object Model(浏览器对象模型) 操作浏览器
DOM
DOM树
把HTML看作是倒挂的树状结构,树根为document
1.document对象由js解释器自动创建
2.DOM会把页面上所有元素看作是DOM对象/节点/元素
获取元素
通过HTML属性获取
ID
语法:var elem=document.getElementById("id");
返回:一个DOM对象
注意:
1.若id重复,只能返回第一个
2.若未找到,返回null
标签名
语法:var elems=document.getElementByTagName("标签名");
返回:一个DOM集合(类数组对象)
注意:
1.返回的是集合,不能直接操作,除非添加下标得到某一个,或遍历数组得到所有元素
2.若未找到,返回空集合
3.可以从document找到页面上所有标签,也可从parent找到parent下面的标签
class
语法:var elems=document.getElementByClassName("class");
返回:一个DOM集合(类数组对象)
注意:同标签名方式
通过节点之间的关系获取元素
前提:至少找到一个元素,才能找关系
父元素 xx.parentNode(单个元素)
子元素 xx.children(集合)
第一个子元素 xx.firstElementChild(单个元素)
最后一个子元素 xx.lastElementChild(单个元素)
前一个兄弟元素 xx.previousElementSibling(单个元素)
后一个兄弟元素 xx.nextElementSibling(单个元素)
操作元素
<elem 属性名="属性值" style="样式">内容< /elem>
内容
1. innerHTML 操作双标签,能识别标签
获取:elem.innerHTML;
设置:elem.innerHTML="新内容";
2. innerText 操作双标签,不能识别标签
获取:elem.innerText;
设置:elem.innerText="新内容";
3. value 操作input
获取:input.value;
设置:input.value="新内容";
属性
获取:elem.getAttribute("属性名");
设置:elem.getAttribute("属性名","属性值");
简化版
获取:elem.属性名;
设置:elem.属性名="属性值";
注意:
1.简化版class->className
2.简化版只能操作标准属性,不能操作自定义属性
样式
只能操作内联样式,内联样式-优点:
1.优先级最高,保证js用户触发一定会生效
2.只会操作当前元素,不影响其他元素
获取:elem.style.css属性名;
设置:elem.style.css属性名="css属性值";
注意:css属性名的写法-若有横线,变更为小驼峰命名法
绑定事件
elem.onclick=function(){点击后执行的代码}