day-01:
1.JavaScript是什么?
JS:运行在浏览器、弱类型、解释型面向对象的编程语言。
弱类型:不需要定义变量类型,其变量类型由变量保存数据所决定。
解释型:不需要编译,在出错后后续代码不执行,但前面未出错的代码仍然可以运行。
面向对象:对象名.方法()/对象名.属性名
JS的发展历程:3-12没有4
2.怎么使用?
引入JS的方法:
1.直接在body里写<script>JS相关内容</script>
2.在head里引入<script src="js路径"></script>
3.怎么输出内容?
console.log(输出内容)//在打印台输出
仅程序员可见,用于打桩输出查找错误
document.write(输出内容)//在页面输出
内容会覆盖原有的内容,不推荐使用
alert(内容)//在弹窗输出
如果弹窗没有关闭页面会一直加载,无法看到页面内容,不太推荐使用
4.变量的使用
变量:用于需要频繁使用的数值
声明变量:
var 变量名=值
变量名的命名规则:
1.不能使用关键字
2.使用驼峰命名或下划线
3.见名知意,英文命名最佳
4.不用数字开头
5.变量若不赋初值,默认为undefined类型
常量的声明:
const 常量名=值(固定值)
5.数据类型
基本数据类型:
数值类型:number取值很多
字符类型:string取值很多,需要引号括起来
布尔类型:boolean取值true/flase
未定义类型:undefined取值,未定义变量的默认值
空类型:null取值释放内存(变量)但基本不用
引用对象类型:11个
运算符
算术运算符:+加、-减、*乘、\除、%求余
求余n%2用于判断奇偶
n%100取出多位数的后2位
隐式转换:自动将两边的值转为数字,但只能转化可识别的
string仅含有数字-->数字
string含有不可识别部分-->NAN
true-->1
false-->0
null-->0
undefined-->NaN
NaN做任何运算得到的结果都为NaN但他是一个数值类型,且与参加任何比较得到的结果都是false
若+中有字符串出现会将两边的内容转换为字符串拼接起来
比较运算符:>,<,=,>=,<=,==,===,!=,!==
其所得结果一定为布尔值(true,false)
左右两边同样会转换为数字比较
若两边为字符串,比较Unicode码,按位比较
如果判断一个值是否为数字!isNaN(X)
两个等于的区别:==仅仅值相等/===值和类型都相等
所以undefined和null是不一样的
赋值运算符:=,+=,-=,*=,/=,%=
逻辑运算符:&&/||/!(结果布尔值)
&&与运算:全满足为true,一个不满足条件即其值为false
||或运算:一个满足就为true,都不满足为false
!否:!true=false,!!true=true
自增自减:
i++,i--相当于i=i+1/i+=1
前++,后++区别:前++先运算再返值,后++先返值后运算。二者单独使用时,并无区别
位运算:m>>n,m右移n位,等于m/2的n次方
m<<n,m左移n位,等于m*2的n次方
day02
分支结构if的三种写法
if(条件){操作}
if(条件){操作}else{默认操作}
if(条件1){操作1}else if(条件2){操作2}
switch case的写法
switch(变量){
case 值:
操作一;
break;
default:默认操作;
}
if和switch的区别
switch:效率高,速度块,但是需要最后的结果才能执行
if:可以做范围判断但是执行效率较慢
三目运算;
语法:条件?操作1:默认操作
注意:默认操作不能省略,操作语句只有一行,多语句就推荐switch或if
强制转换类型
转字符串:
var str=x.tostring();
var str=String();//等效隐士5转换
转数字:
parseInt(str/num);//遇到非数字停止,上来就是非数字就NaN,不认识小数点
parseFloat(str);//原理同上,认识第一个小数点
Number();//等效隐式转换
转布尔:
Boolean();//只有False,0,"",undefind,null,NaN这六个是fakse其他都是true
day03
循环
while循环:
var 循环变量=x;
while(循环条件){
循环体
循环变量
}
循环是一次一次执行的
for循环:
for(循环变量;条件;变量的变化){
操作
}
while和for的区别:
while一般用在不知道循环次数时
for一般用在知道循环次数时
function基础
概念:
function--函数称之为方法先预定好的以后可以反复使用
函数的使用
定义:function 函数名(){函数体}
调用:直接在js中写:函数名()
在html中绑定事件:<elem onclick="函数名()">文字</elem>
什么时候使用:
不希望页面打开就立刻执行
希望由用户触发
函数地位在js中时第一等公民
函数带参数的用实参接住且传参顺序不能变
day04
function的创建和使用
创建:function 函数名(形参){函数体;return返回值;}
或者 var 函数名=function(形参){函数体;return返回值;}
调用:var result=函数名(实参)
return:本意为推出循环,但有数据就会把数据返回函数外部,但是不保存数据所以需要一个变量接住
作用域:
全局作用域:页面任何位置都可以访问
函数作用域:只能在函数内部调用
变量使用规则:优先局部
缺点:全局不能使用局部的,解决:加return 千万不能对未声明的变量赋值--会全局污染
声明提前:
var function会提前到程序的顶部但是赋值留在原地
声明创建的函数会完整提前,直接量方式只有变量名提前
所以变量名和函数尽量不重复,先创建后使用
重载
函数自带的arguments对象
通过下标去获取传入的实参argument[i]
通过length获取了几个实参
判断argument的不同执行不同德操作
数组
创建一个变量保存多个数据,元素下标从0开始
创建:var arr=[数据]或者var arr=new array(数据)
获取数据:函数名[i]
添加/替换:数组名[i]=新数据
三大不限制:不限制类型,不限制个数,不限制下标越界
数据名.length:
获取数组倒数第n个元素:arr[arr.length-n]
在末尾添加元素:arr[arr.length]=新
删除倒数的元素:arr.length=n;
day05
DOM
通过id查找:
var elem=document.getEementById(id的值)、
通过标签查找:
var elems=document.getElementByTagName("标签名“)
注意:返回的是一个集合,集合不能直接操作
可以通过下标来操作元素或者遍历数组操作每一个元素
通过class查找:
var elems=document.getElementByClassName(”class名“)
关系网
通过关系查找要先确定一个元素才能使用
父亲:elem.parentNode
儿子:elem.Children
第一个儿子:elem.firstElementchild
最后一个儿子:elem.lastElementchild
前一个兄弟:elem.previousElementSibing
后一个兄弟:elem.nextElementSibing