一、变量与数据类型
1.var声明变量
声明多个变量用逗号分开,
var s1="hello world!",s2="hhh"
console.log(s1)
console.log(s2)
2.变量命名
变量名要见名知意,可以由字母、下划线、$组成,但不能是数字开头
以小写字母开头,多个单词时第二个开始首字母大写(驼峰命名)
不可以与关键字、保留字重复
3.数据类型
数值(Number):100,1,4
字符串(String):”Hello”
布尔(Boolean):true,false
未定义(Undefined):undefined,定义了变量但没赋值,该变量的值默认为undefined
空(Null):null
对象(Object):{}
当不知道变量为多少时,一般进行以下赋值:
var str=””;
var n=0;
var student=null;
二、表达式与运算符
1.字面量:有固定值的数据
表达式:通过运算符将变量、字面量组合起来的式子
返回值:表达式的结果
2.比较运算符(返回值为布尔类型)
==等于(不比较数据类型,只比较值)
===恒等于(数据类型与值都比较)
!=不等于
!==非恒等于
20==”20”为真
20===”20”为假
逻辑与&&
逻辑或||
逻辑非!
3.条件运算符
表达式 ? value1 : value2
若表达式为真,返回value1,反之,返回value2
三、函数基础
函数是一个可执行的语句块,通过关键字function声明,只有在调用函数时才执行函数
声明函数:
function fun(){
语句
}
调用函数
fun();
形参:声明函数时定义
实参:调用函数时传递实参
function fun(x,y){
var result=3*x+4*y;
console.log(result);
}
fun(5,6);
四、对象
1.定义对象
var 对象名={
属性1:属性值1,
属性2:属性值2,
......,
属性n:属性值n
}
2.获取对象的属性值
对象名.属性
或
对象名[“属性”]
var cat={
name:"猫",
age:2
}
console.log(cat.name);
3.方法
(1)定义
对象的属性的值是函数,则称为方法
var cat={
name:"猫",
age:2,
sayName:function(){
console.log("我是"+this.name)
},
eat:function(food){
console.log("我吃"+food)
},
computed:function(n,m){
return n+m;
}
}
cat.sayName();
cat.eat("鱼");
var result=cat.computed(1,2);
console.log(result)
(2)常用方法
1)map
下文遍历数组会用到
2)push
直接在数组后追加元素(会改变数组本身)
数组名.push(元素1,元素2,..)
3)sort
将数组元素按从小到大排序(会改变数组本身元素的排序)
数组名.sotrt()
4)filter
过滤器,可以将符合条件的元素过滤出来(不改变数组本身)
eg.将大于等于3的元素过滤出来保存到新数组
var newList=list.filter(function(item){
if(item>=3){
return item;
}
})
console.log(newList)
5)join
连接数组,并把数组变成字符串,此外,可以填写参数,表示字符之间的连接符号
var list=[3,2,7,"a","b"];
var str=list.join();
console.log(list)
console.log(str)
结果为:
[3, 2, 7, 'a', 'b']
3,2,7,a,b
若给join添加空字符串的参数,表示字符之间没有连接
var str=list.join("");
此时,结果为:
[3, 2, 7, 'a', 'b']
327ab
若参数为+号,
var str=list.join("+");
结果为:
[3, 2, 7, 'a', 'b']
3+2+7+a+b
6)splite
将字符串变成数组,若添加参数,会将参数视为连接符,按照连接符将字符拆分成元素
eg1.
var str="banana"
var list=str.split();
console.log(list)
不添加参数:
结果为:['banana']
添加参数空字符
var list=str.split("");
结果为:['b', 'a', 'n', 'a', 'n', 'a']
添加参数n
var list=str.split("n");
结果为:['ba', 'a', 'a']
eg2.将年月日拆分
var str="2023-10-1"
var list=str.split("-");
console.log(list)
结果为:['2023', '10', '1']
7)setInterval
计时器方法,在控制台输出当前时间,每秒输出一次
setInterval(function(){},ms);
ms表示间隔多少毫秒输出一次
eg1.从0开始输出
var n=0;
setInterval(function(){
console.log(n++)
},1000)
eg1.设置计时器,每秒输出当前时间
setInterval(function(){
var d=new Date();
var hours=d.getHours();
var minutes=d.getMinutes();
var seconds=d.getSeconds();
console.log(hours+":"+minutes+":"+seconds)
},1000)
4.分类
(1)自定义对象
用var定义,封装的作用
(2)内置对象
1)定义
JavaScript语言提供了一些对象,让开发人员可以使用一些现成的功能
2)常见内置对象
①Array-数组
②Math-数学
Math.floor():向下取整(向小的数取整,如3.14取3,-3.14取-4)
console.log(Math.floor(-3.14))//结果为-4
Math.random():0-1的随机数
获取1-10的随机整数:
Math.floor(Math.random()*10+1)
获取0-7的随机整数:
Math.floor(Math.random()*7)
eg.随机选择一个数组元素输出
var list=["abandon","bring","copy","delete",1,5,9,0,"¥"]
var index=Math.floor(Math.random()*list.length)
console.log(list[index])
Math.abs():绝对值
Math.sqrt(n):开根号
Math.pow(m,n):m的n次方,m^n
③Date-日期
var d=new Date();不写参数,表示当前时间
var d_target=new Date(“2020-1-1”)
d.getFullYear();获取年份
d.getMonth();从0开始
d.getDate();
d.getDay();获取星期
d.getHours();
d.getMinutes();
d.getSeconds();
d.getTime();获取时间戳
时间戳是指格林威治时间1970年 1月1日0时0分0秒起到现在的总毫秒数
④RegExp-正则表达式
可以用来匹配字符串,实现字符串的截取或按规则替换和验证字符串内容
Ⅰ创建正则表达式对象
var 对象名=new RegExp(“值”)
或
var 对象名=/值/
Ⅱ语法
^开头
$:结尾
[]:范围
{}:位数
():分组
+:匹配1位或多位,同{1,}
?:0位或1位,同{0,1}
.:匹配所有
\:转义
\d:数字,同[0-9]
\w:数字、字母、下划线
\s:空格或换行
Ⅲ方法
方法一:test();
检测是否匹配成功,成功返回true,反之false
eg1.用户是否输入小写字母,[]表示范围
var str="f";
var reg=/[a-z]/;//表示一位小写字母
var result=reg.test(str);
console.log(result);
该代码表示检验是否有小写字母,只要str中有小写字母,返回true,没有,则返回false,该例子结结果为true
方法二:exec()
返回值是匹配的内容
var result=reg.exec(str);
结果为f,
若将str改为111gf,结果为g,因为reg只设定了一位
eg2.判断输入是否只有一位,且为小写字母(^表示开头,$表示结尾)
var reg=/^[a-z]$/;//表示只输入一位小写字母
var result=reg.exec(str);
若str不为一位,且为小写字母,则返回null
r若为一位小写字母,则返回该小写字母
eg3.只匹配两位小写字母
var reg=/^[a-z]{2}$/;
eg4.只匹配5位到8位小写字母
var reg=/^[a-z]{5,8}$/;
eg5.匹配5-8位小写字母和数字(只要至少有一种就匹配成功)
var reg=/^[a-z0-9]{5,8}$/;
eg6.匹配5-8位大小写字母和数字(只要至少有一种就匹配成功)
var reg=/^[a-z0-9A-Z]{5,8}$/;
eg7.匹配5-8位大小写字母和数字还有下划线(只要至少有一种就匹配成功)
var reg=/^[a-z0-9A-Z_]{5,8}$/;
或
var reg=/^\w{5,8}$/;
eg8.匹配一位或多位数字
var reg=/^[0-9]{1,}$/;
或
var reg=/^[0-9]+$/;
或
var reg=/^\d+$/;
eg9.匹配一位或多位空格或换行
var reg=/^\s+$/;
eg10.匹配0位或1位数字
var reg=/^\d?$/;
eg11.匹配所有内容
var reg=/^.+$/;
eg12.匹配是否为”1+”(用转义字符)
var reg=/^1\+$/;
eg13.匹配163.com邮箱(@前面是用户的用户名,@后面为163.com)
var reg=/^\w{5,12}@163\.com$/;
if(reg.test(str)){
console.log("验证通过")
}
else{
console.log("验证失败")
}
var result=reg.test(str);
console.log(result);
eg14.去掉字符串里的字母
var str="123ahshfv"
var reg=/[a-zA-Z]/g//g表示全局匹配
var result=str.replace(reg,"")
console.log(result)
将字符串里的字母全部换成9
var result=str.replace(reg,"9")
eg15.截取字符串
var str="2023-10-02";
var reg=/^(\d{4})-(\d{2})-(\d{2})$/;//()表示分组
var result=reg.exec(str);
console.log(result)
结果为 ['2023-10-02', '2023', '10', '02']
(3)宿主对象(document)
(4)第三方库对象(jQury,Vie等)
五、数组
1.定义数组
var 数组名=[元素1,元素2,...]
或
new 构造函数
var 数组名=new Array(元素1,元素2,...)
2.属性
获取数组长度:数组名.length
3.遍历数组
(1)while
var list=[1,2,3,"a","b"];
var i=0;
while(i < list.length){
console.log(list[i])
i++;
}
(2)for
var list=[1,2,3,"a","b"];
for(var i=0;i<list.length;i++){
console.log(list[i]);
}
(3)for in(i是索引)
var list=[1,2,3,"a","b"];
for(var i in list){
console.log(list[i])
}
(4)for of(i是元素)
var list=[1,2,3,"a","b"];
for(var i of list){
console.log(i)
}
(5)map方法
var list=[1,2,3,"a","b"];
list.map(function(value,index){
console.log("第"+(index+1)+"个元素是:"+value)
})
4.结合数组与对象
eg1.获取第一个元素的名字
var list=[
{name:"好好",age:18,sex:"男"},
{name:"学习",age:19,sex:"女"},
{name:"天天",age:20,sex:"男"},
]
console.log(list[0].name)
eg2.找出所有男生,并放入一个新数组
法一:
var list=[
{name:"好好",age:18,sex:"男"},
{name:"学习",age:19,sex:"女"},
{name:"天天",age:20,sex:"男"},
]
var newList=list.filter(function(item){
if(item.sex==="男"){
return item;
}
})
console.log(newList)
法二:
var newList=[];
for(var i=0;i<list.length;i++){
if(list[i].sex=="男"){
newList.push(list[i]);
}
}
console.log(newList)
eg3.找出最大值的索引
var list=[4,6,1,2,3,7,5],max=list[0];
var i=0;
list.map(function(value,index){
if(value>max){
max=value;
i=index;
}
})
console.log(i)
console.log(max)