day23 JavaScript
- js是javascript的缩写,是一门专门用来控制网页内容的脚本语言并且是唯一的;是web标准中的行为标准,用来控制网页内容的变化
- 内联js,写在标签的事件相关属性中,例如:onclick
- 内部js,将js代码写在script标签中,script标签可以放在head标签中,也可以放在body标签中
- 外部js,将js代码写在js文件中,通过script标签导入
- js能做的事
- 通过js修改标签内容
- 修改标签属性
- 修改标签属性
- 添加页面内容
- js标识符:要求由字母数字下划线符不建议使用,在jquery中有特殊意义
- js中定义变量有两种情况:(注意在方法外不加var定义变量需对其进行赋值,否则出现xx is not defined)
- 1.都加var,在方法内则是局部变量,在方法外则是全局变量。
- 2.在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法之后)
- js关键字:for、if、var、while、func、true等
- js数据类型:Number(包含所有数字,支持科学计数法)、String(字符串,用双引号或者单引号引起来的字符集,支持转义字符和编码字符)、Array(数组)、Object(对象)、Boolean(只有true和false两个值,代表真和假)
- typeof:获取数据对应的类型
- 一般情况下,一行只写一条语句,语句结束后可以有分号也可以没有,
- parseFloat:将数据转为浮点数
- parseInt:将数据转换成整数
- 变量
- 声明变量的语法:语法1:变量名=值 语法2:var 变量名/var 变量名=值
- 说明:标识符,不能是关键字,采用驼峰式命名;声明变量如果没有给变量赋值(语法2才生效),变量的默认值是undefined
- 同时声明多个变量:a=b=c=10,或者var a1,b1=1,c1=2,不支持a,b=1,2的写法,
- 运算符:支持数学运算符,比较运算符,逻辑运算符,赋值运算符,位运算
- 数学运算符:+,-,*,/,%,++,--,
- 比较运算符:>,<,==,!=,>=,<=,===,!==
- js中的'=='判断两个数据的值是否相同,不管类型,’===‘既判断类型,又判断值,相当于python中的'==',!=和!==同上
- 逻辑运算符:&&、||、!,即与或非运算,参与运算的变量均为布尔值
- 赋值运算符:=,+=,-=,*=,/=,%=,与python一样
- 三目运算符:条件表达式?值1:值2,判断表达式是否为true,为true返回值1,否则值2
- 分支结构:有if和switch两种分支结构
//分支结构
if(条件语句){
代码块
}
if(条件语句){
满足条件执行代码块
}else{
不满足条件语句执行代码块
}
if(条件语句1){
满足条件语句1执行代码块
}else if(条件语句2){
满足条件语句2执行代码块
}else{
不满足上述全部条件执行代码块
}
switch(表达式){
case 值1:{
代码块1
}
case 值2:{
代码块2
}
case 值2:{
代码块3
}
......
default:{
代码块n
}
}
//先计算表达式的结果(表达式不能是赋值运算语句),让这个结果从前往后与每个case后的值进行比较(比较时是用的'==='强等于),如果哪个case后的值和表达式的结果想等,就将这个case作为入口,依次执行后面每个对应的代码块,直到执行完最后一个代码块(包含default)或者遇到break为止,若每个case后的值都和表达式结果不相等,则执行default后的代码
//for-in循环
for(变量 in 序列){
循环体
}//变量依次获取序列中元素的下标(或者对象中的属性名),取完为止,每取一次执行一次循环体
for(表达式1;表达式2;表达式3){
循环体
}
while(条件表达式){
循环体
}
do{
循环体
}while(条件语句)//先执行循环体,再判断条件语句是否为true,为true再执行循环体,否则跳出循环,do-while型循环至少会执行一次循环体
function funName(argsList){
函数体
}
//支持位置参数传参,不支持关键字参数传参,不会报错,但顺序无效;参数可以设置默认值,但也需要放在没有默认参数的后面;不支持不定长参数
//匿名函数
func1 = function(参数列表){
函数体
}
func1(传入参数)
a = function(参数列表){
函数体
}(传入参数)
- 字符串:单引号或双引号引起来的字符集,支持转义字符和编码字符,可以通过下标取到对应位置上的字符,但只支持非负整数的下标,下标越界不会报错,获取到的值是undefined;js中字符串不支持[]的切片语法,但有相应的方法
- 字符串相关操作:加法:支持字符串和任何数据相加,如果另一个数据不是字符串,就转换为字符串再进行拼接操作;比较运算,和python一样比较字符编码
- 字符串长度:字符串.length
- 相关方法:字符串.slice()
- 数组:相当于python中的列表
arr1 = [21,34,67,32,1,57,90]
//查
arr1[下标]
//遍历
for(index in arr1){
console.log('index:'+index,arr1[index])
//增
arr1.push(100) //可以添加多个元素,并返回新数组的长度
console.log(arr1)
arr1.splice(插入位置的下标,0,插入的元素1,元素2...) //在指定下标前插入指定元素,可以同时插入多个元素
//删除
laseElem = arr1.pop() //只能删除数组中的最后一个元素
firstElem = arr1.shift() //删除并返回数组第一个元素
arr1.splice(开始删除的下标,删除的个数)
//改
arr1[下标]=新值
}
//排序
//sort(函数对象)
//函数对象-函数,有两个参数(代表数组中的两个元素),返回值代表排序方法
nums = [21,45,26,75,1,35,65]
nums.sort(function(a,b){b-a}) //从大到小
nums.sort(function(a,b){a-b}) //从小到大
- 对象:和python类的对象一样,主要由对象属性和对象方法组成
- 创建对象:1.对象名={key1: value1, key2: value2...};2.对象名 = new 类型()
- 构造方法:一个用来创建对象的函数,函数名相当于类名,首字母大写;函数的功能是通过this添加对象属性和对象方法,这里的this相当于self
//构造方法
functoin Person(name,gender,age){
//通过new方式调用Person,这时的this是Person对象
//若未使用new方式调用Person,这时的this是window对象
this.name = name
this.gender = gender
this.age = age
//添加对象方法
this.eat = function(food){
console.log(this.name+'is eating'+food)
}
return this
}
//使用构造方法创建对象
obj1 = new Person('aaa','male',18) //在创建一个Person类时一定要使用new关键字