一、对象
1.什么是对象?
-
在js,对象是一组拥有无序的 属性和 方法的集合
-
生活中,万事万物皆对象,对象中可以抽象处两个概念:特征(属性)和行为(方法)
-
人:特征有姓名性别年龄身高体重... 行为:吃,敲代码,走路...
-
2.为什么要有对象?
-
前面一个变量只能保存一个值,有了对象之后,一个对象就可以保存多条数据
-
一个人信息可以 使用对象来表示。一个商品的信息也可以保存在对象中。
3.如何定义对象?
var obj = {属性名:属性值,属性名:属性值,属性名:属性值,属性名:属性值,方法名:function(){},方法名:function(){},方法名:function(){},方法名:function(){},}
4.访问对象中属性和方法的语法?
访问对象的属性:对象名.属性名 或者 对象名["属性名"]访问对象的方法:对象名.方法名() 或者 对象名["方法名"]()
5.对象中的键值对?
-
一般把对象中属性叫 键,键对应的值叫 值
-
对象就是一组无序的键值对的集合
-
对象的键值对直接可以使用 , 隔开
6.对象的键的命名规则?
-
符合变量的命名规则,都是可以作为键的
-
数字可以作为键, 访问的时候需要使用 []语法来访问
-
特殊符号也可以键,但是需要使用''或""进行包裹, 访问的时候需要使用 []语法来访问
7.对象的 增删改查 操作
-
.语法:
-
增: obj.name = 'zs' 对象中不存在这个键,就属于增
-
改: obj.name = 'ls' 对象中存在这个键,就属于改
-
删: delete obj.name 删除对象中name属性和它的值
-
查: console.log(obj.name)
-
-
[]语法:
-
增: obj["name"] = 'zs' 对象中不存在这个键,就属于增
-
改: obj["name"] = 'ls' 对象中存在这个键,就属于改
-
删: delete obj["name"] 删除对象中name属性和它的值
-
查: console.log(obj["name"])
-
8.对象的特性?
-
访问对象中不存在的键,结果就是 undefined
-
对象的键具有唯一性
9.对象的遍历?
-
遍历:一个一个进行查找 for..in循环
// 循环的次数是由键的个数来决定的for (var key in obj) {// key指代的是所有的键// console.log(key);// obj指的是对象本身// console.log(obj);// obj[key]表示对象的值console.log(obj[key]);}
二、数组
1.什么是数组?
-
数组是一组有序的数据的集合。
-
数组属于js内置的对象,身上也有属性和方法
-
通过typeof检测数组的类型:'object'
2.定义数组方式?
1. 字面量定义法var arr = []; // 一个空数组var arr = [12,34,67,78];//数组中有4个元素,分别是12,34,67,78var arr = ['zs','ls','ww'] 2. 构造函数定义法(构造函数后面的知识点)var arr = new Array(); // 类似于 var arr = []; 定义了一个空数组 var arr = new Array(5); // 数组中有5个元素,但是元素的值都是undefinedvar arr = new Array(5,23,45,56); // 数组有4个元素,分别是5,23,45,56
3.数组的长度和数组的下标 (arr表示数组的名)
-
数组中元素的个数:arr.length
-
数组中元素的下标:每一个元素都有一个下标,从0开始,依次加1 , 第一个元素的下标是0,第二个元素的下标是1... 最后一个是arr.length-1
-
数组元素的获取:arr[下标]
-
注:下标也叫索引
4.数组的操作?
-
arr.length
-
是可读(获取)可写 (修改) 的属性
-
读的语法:arr.length ============ 读取到的元素的个数
-
写的语法: arr.length = 数字n
-
删除: 你设置的数字n < length, 数组的长度变成n,删除了多余的元素
-
无操作:你设置的数字n = length, 数组的长度变成n,相当于没有操作
-
增:你设置的数字n > length,数组的 长度变成n,增加了 n-length个空元素(undefined)
-
-
-
索引
-
是可读(获取)可写 (修改) 的属性
-
读的语法: arr[下标/索引]:
-
当索引在数组中存在,结果是索引对应的元素,
-
当索引在数组中不存在,结果是undefined
-
-
写的语法: arr[下标/索引] = 值
-
修改: 索引< arr.length,就是修改
-
增加一个: 索引=arr.length,尾部增加一个
-
增加多个: 索引 > arr.length,尾部增加索引 - length个,最后一个有值,多余的使用 undefined补充
-
-
-
遍历
var arr = [12, 345, 57, 8]; 循环遍历:遍历下标即可,然后再通过下标获取你的元素 for(var i = 0;i<=arr.length-1;i++){ // [0-3]console.log(i) ; // 打印的是下标console.log(arr[i]) ; // 打印的是下标对应的元素} 或者 for(var i = 0;i<arr.length;i++){ [0,4)console.log(i) ; // 打印的是下标console.log(arr[i]) ; // 打印的是下标对应的元素}
5.数组相关练习
-
练习1:求数组中所有元素的和 var arr = [12,34,45,56]
-
练习2:求数组中所有元素的和 var arr = [12,"李白","李白",34,"王维",45,"白居易",56]
-
练习3:创建一个数组,给数组元素动态赋值,从1赋值到100
-
练习4:创建一个数组,给数组元素动态赋偶数值,从2赋值到100
-
练习5:求数组中所有元素和的平均数 var arr = [12,"李白","李白",34,"王维",45,"白居易",56]
-
练习6:求数组中元素的最大值和最小值
三、数组API
对象有属性和方法,数组是js的内置对象,它有 arr.length属性 也有方法(方法也称为数组的api)
分三大类 一、 能够改变原数组的方法(7个)二、 不能够改变原数组的方法 三、 es5新增的数组方法 (不能够改变原数组的方法)
1.能够改变原数组的方法(7个push,pop,unshift,shift,splice,sort, reverse)
-
push:
-
语法: arr.push(元素1,元素2...)
-
作用: 向数组的尾部添加一个或者多个元素
-
参数: 数组元素
-
返回值:添加后数组的长度
-
-
pop:
-
语法: arr.pop()
-
作用: 向数组的尾部删除一个
-
参数: 无
-
返回值:删除的那个元素
-
-
unshift:
-
语法: arr.unshift:(元素1,元素2...)
-
作用: 向数组的头部添加一个或者多个元素
-
参数: 数组元素
-
返回值:添加后数组的长度
-
-
shift:
-
语法: arr.shift()
-
作用: 向数组的头部删除一个
-
参数: 无
-
返回值:删除的那个元素
-
-
splice:
-
语法1: arr.splice(索引)
-
作用1: 从索引位置开始删除索引以及索引以后对应的元素
-
参数1: 索引
-
语法2: arr.splice(索引,n)
-
作用2: 从索引开始删除n个元素
-
参数2: 索引和个数
-
语法3:arr.splice(索引,n,元素1,元素2)
-
作用3: 从索引开始删除n个元素,在删除的位置增加元素1,元素2
-
参数3: 索引,n,元素列表
-
返回值:以数组形式返回删除的所有元素
-
-
sort:
-
语法1:arr.sort() 不常用
-
作用1:按照字符对应的 ASCII表 字符对应的位置来 一位一位进行从小到大排序
-
参数1:无
-
返回值:排序后的数组
-
语法1:arr.sort(fucntion(a,b){return a-b}) 常用
-
作用1:arr.sort(fucntion(a,b){return a-b}从小到大排序 arr.sort(fucntion(a,b){return b-a}从大到小排序
-
参数1:无
-
返回值:排序后的数组
-
- reverse:
-
语法1:arr.reverse()
-
作用1:翻转数组的元素
-
参数1:无
-
返回值:翻转后的数组
-
2.不能够改变原数组的方法(5个indexOf,lastIndexOf,concat,join,slice)
-
indexOf
-
语法:arr.indexOf(元素)
-
作用:根据元素查找元素首次出现下标,找不到返回-1
-
返回值:下标或者-1
-
参数:查找的元素
-
-
lastIndexOf 语法:
-
arr.indexOf(元素)
-
作用:从后向前查找,根据元素查找元素首次出现下标,找不到返回-1
-
返回值:下标或者-1
-
参数:查找的元素
-
-
concat
-
语法:arr.concat(arr1,arr2)
-
作用:拼接多个数组
-
返回值:拼接好的数组
-
参数:数组
-
-
join
-
语法:arr.join("操作符号")
-
作用:将数组的元素以操作符号 形式拼接成字符串
-
返回值:拼接好的字符串
-
参数: "符号"
-
-
slice
-
语法:arr.slice(开始下标,结束下标)
-
作用:从数组中截取出一个数据,包左不包右(包含开始下标对应的元素,结束下标对应的元 素截取不出来)
-
返回值: 截取出来的数据
-
参数: 开始下标,结束下标
-
3.es5新增的数组方法 (不能够改变原数组的6个方法forEach,map,filter,reduce,some,every)
-
forEach
-
语法:arr.forEach(function(item,index,array){})
-
作用: 类似于for循环,遍历数组
-
返回值: 无
-
参数: function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
-
map
-
语法:arr.map(function(item,index,array){ return item*2})
-
作用: 遍历数组,并返回一个映射后的数组
-
返回值: 有,返回映射后的新数组
-
参数: function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
-
filter
-
语法:arr.filter(function(item,index,array){ return 条件判断})
-
作用: 过滤出一个新的数组
-
返回值: 返回一个过滤出来的数组
-
参数: function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
-
reduce
-
语法:arr.reduce(function(sum,item,index,array){ return },n)
-
作用: 遍历数组,求和的
-
返回值: 返回和
-
参数: function(sum,item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它 sum:function(sum,item,index,array){}函数上一轮的返回值,sum的初始值n
-
-
some
-
语法:arr.some(function(item,index,array){ return 条件判断})
-
作用: 数组的元素有一个满足条件,返回的结果就是true,都不满足就是false
-
返回值: 布尔类型
-
参数: function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
-
every
-
语法:arr.every(function(item,index,array){ return 条件判断})
-
作用: 数组的每一个元素都满足条件才是true,返回的结果就是true, 有一个不满足条件的 结果就是false
-
返回值: 布尔类型
-
参数: function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
4es6新增的数组方法 (不能够改变原数组的2个方法find,findIndex)
-
find
-
语法: arr.find(function(item,index,array){ return 条件判断})
-
作用:查找元素的
-
返回值:第一个满足条件的元素
-
参数:function(item,index,array){} item数组的每一个元素,index数组元素对应的下标,array属性本身,一般不写它
-
-
findIndex
-
语法: arr.findIndex(function(item,index,array){ return 条件判断})
-
作用:查找元素的,找的是第一个满足条件的元素的下标
-
返回值:第一个满足条件的元素的下标
-
参数:function(item,index,array){} item数组的每一个元素,index数组元素对应的下标, array属性本身,一般不写它
-
-
5.数组坍塌
概念:删除数组中的一个元素时,删除的这个元素的后面的元素 会出现下标前置, 我们管这个现象叫数组坍塌
6.数组去重
数组去重方法一:indexOfvar arr = [12, 34, 12, 34, 45, 56]function fn(arr) {newarr = [];for (var i = 0; i < arr.length; i++) {if (newarr.indexOf(arr[i]) == -1) {newarr.push(arr[i])}}return newarr;}console.log(fn(arr));方法二:splicevar arr = [12, 34, 12, 34, 45, 56];function fn(arr) {arr.sort(function(a, b) {return a - b})for (var i = 0; i < arr.length; i++) {if (arr[i] == arr[i + 1]) {arr.splice(i, 1);i--;}}return arr}console.log(fn(arr));方法三:set集合var arr = [12, 34, 12, 34, 45, 56];var set = new Set(arr);console.log(set);方法四:键的唯一性var arr = [12, 34, 12, 34, 45, 56];function fn(arr) {var newarr = []var obj = {}for (var i = 0; i < arr.length; i++) {obj[arr[i]] = "zs";}for (var key in obj) {newarr.push(Number(key))}return newarr;}console.log(fn(arr));方法一:不改变原数组:var arr = [12, 34, 12, 34, 45, 56];function fn(arr) {var newarr = []for (var i = 0; i < arr.length; i++) {newarr.push(arr[i])}newarr.sort(function(a, b) {return a - b})for (var i = 0; i < newarr.length; i++) {if (newarr[i] == newarr[i + 1]) {newarr.splice(i, 1);i--;}}return newarr}console.log(arr);console.log(fn(arr));
四、字符串
1.字符串的类型
-
字符串属于js的内置的对象
-
js中,存在一中类型叫包装数据类型, 在存储的时候属于基本数据类型,在使用的时候,属于对象 类型。
2.字符串的定义方式
字面量法:var str = 'absdhhds' 构造函数法var str = new String("zbsdhhda")
3.字符串的length属性和索引属性
-
length是一个只读属性
-
索引 是一个只读属性
4.字符串的遍历
for(var i = 0;i<str.length;i++){console.log(str[i])}
五、字符串的API
-
1.和数组公用的(4个concat,indexOf,lastIndexOf,slice)
-
concat
-
语法:str.concat(str1,str2。。。)
-
作用:将str,str1,str2拼接到一起
-
返回值:拼接好的字符串
-
参数:一个或多个字符串
-
-
indexOf:
-
语法:str.indexOf(元素)
-
作用:根据元素查找元素首次出现的下标位置,找不到返回-1,找到了返-1,找到了返回这个下标
-
返回值:下标或者-1
-
参数: 字符串 或者一个小字符串
-
语法:str.indexOf(元素,n)
-
作用:从下标为n的位置开始往后找,根据元素查找元素首次出现的下标位-1,找到了返回这个下标
-
返回值:下标或者-1
-
参数: 字符串 或者一个小字符串
-
-
lastIndexOf:
-
语法:str.lastIndexOf(元素)
-
作用:从后向前,根据元素查找元素首次出现的下标位置,找不到返回-1,找到了返回这个下标
-
返回值:下标或者-1
-
参数: 字符串 或者一个小字符串
-
-
slice:
-
语法:str.slice(开始下标,结束下标)
-
作用:字符串截取
-
返回值:截取后的小字符串
-
参数: 开始下标,结束下标
-
-
-
2.数组相关的(split)
-
split:
-
语法:str.split("分割符")
-
作用:将字符串,以分割符的形式分割成数组
-
返回值:分割后数组
-
参数: 一般是一个符号
-
eg: var str = 'ab-cd-ge'; str.split("-") ===== ["ab","cd","ge"]
-
eg: var str = 'abc-df'; str.split("") ===== ["a","b","c","-","d"
-
eg: var str = 'abcdef'; str.split("cd") ===== ["ab","ef"]
-
-
-
3其他api(toUpperCase,toLowerCase,replace,slice,substring,substr)
-
替换:replace:
-
eg: str = '张三喜欢sb,上班期间喜欢sb,下班喜欢sb' str.replace 结果 str = '张三喜欢xx,上班期间喜欢sb,下班喜欢sb'
-
返回:替换后的字符串
-
作用:把查询到的旧字符串,替换成新内容
-
语法:str.replace("旧字符串、旧字符","新内容");
-
-
字符串截取的三个api
-
slice(开始下标,结束下标):
-
substring(开始下标,结束下标) :截取字符串,包左不包右
-
substr(开始下标,长度n) :截取字符串,从开始位置截取n个
-
-
-
字符串转大小写:
-
str.toUpperCase(): 全部将str中小写字母转为大写字母
-
str.toLowerCase(): 全部将str中大写字母转为小写字母
-
六、Date对象
-
用于处理时间和日期的对象
-
创建对象:
-
var date = new Date(); 创建当前本地的日期对象
-
var date = new Date("2023-4-4 00:00:00"); 创建 "2023-4-4 00:00:00"
-
-
date日期对象通过typeof检测的结果是 "object"
-
api:
-
date.toLocaleString(): 将日期对象转为字符串形式
-
date.getFullYear(): 获取四位数年份
-
date.getMonth(): 获取月 (0-11)
-
date.getDate(): 获取日
-
date.getHours(): 获取时
-
date.getMinutes(): 获取分
-
date.getSeconds(): 获取秒
-
date.getDay(): 获取星期 0-6( 其中0代表中国周日,1代表周一,2代表
-
- date.setFullYear(): 修改四位数年份- date.setMonth(): 修改月 (0-11)- date.setDate(): 修改日 - date.setHours(): 修改时 - date.setMinutes(): 修改分 - date.setSeconds(): 修改秒 - date.getTime(): 获取当前date日期距离1970年1月1日 午时的毫秒值
七、Math对象
Math:用于处理数学的内置对象,这个对象的属性和方法需要通过Math类名来调用
Math.random(): 随机数
Math.max(n1,n2,n3...): n1,n2,n3代表数字,取n1,n2,n3最大值
Math.min(n1,n2,n3...): n1,n2,n3代表数字,取n1,n2,n3最小值
Math.pow(n,m): n的m次幂, (m个n相乘)
Math.sqrt(9): 对9开根号
Math.ceil(2.1): 向上取整
Math.floor(2.1): 向下取整
Math.round(5.5): 四舍五入(大于等于0.5,往上走)
Math.abs(-4): 取绝对值(把负号去掉)