一.对象
是一组属性和方法的集合
万物皆对象
1.JS对象分类
自定义对象:自己创建的对象
内置对象:JS提供的对象,可以直接使用
宿主对象:根据不同的环境划分
2.创建自定义对象(字面量)
使用{ }创建空对象
{ 属性名: 属性值, 属性名: 属性值, ... }
属性名如果含有特殊字符,必须添加引号
3.访问属性
对象.属性名
对象['属性名']
如果属性不存在结果是undefined
undefined出现位置:变量声明未赋值,函数没有返回值,函数中没有传参
4.创建自定义对象 (内置构造函数)
new Object() 创建一个空对象{},需要单独添加属性。
5.遍历属性
依次访问对象中的每个属性
for(var k in 对象){ k 属性名 对象[k] 属性值 } |
6.检测属性是否存在
对象.属性名===undefined true -> 不存在 false -> 存在
对象.hasOwnProperty('属性名') true -> 存在 false -> 不存在
'属性名' in 对象 true -> 存在 false -> 不存在
一.模板字符串
` 反引号之间的内容就是模板字符串${JS表达式} `
解决了字符串的拼接
二.对象中的方法
就是一个函数
var p={ name: '新哥', tan: function(){ this 指向调用当前方法的对象 } } p.tan() //调用方法 |
三.数据的存储
1.原始类型
直接将数据存储到栈内存
2.引用类型
包含函数、对象、数组
会将值存储到堆内存中,会自动生成一个地址
var xin={ }
把对象的生成的地址保存到栈内存
引用类型数据如果不被任何的地址所指向就会自动销毁
null 是一个空地址,没有指向任何堆内存数据
如果要销毁引用类型的数据,只需要赋值为null即可
四.数组
数组是一组数据的集合,每个数据是一个元素
1.创建 —— 数组字面量
[元素1, 元素2, ... ]
2.访问数组元素
下标(索引):是JS自动为每个元素添加的编号,从0开始的一个整数 >=0
数组[下标]
如果元素不存在,返回的结果是undefined
3.数组的长度
数组.length 获取元素的个数
(1)在数组的末尾添加元素
数组[数组.length] = 值
(2)清空数组
数组.length = 0
4.创建数组 —— 内置构造函数
new Array(元素1, 元素2, ...)
new Array(3) 初始化长度值,可以添加更多个元素
5.数组的分类
关联数组:以字符串作为下标 (了解)
索引数组:以>=0的整数作为下标
6.数组和对象的区别
两种都可以存储一组数据,对象是通过属性存储每个值,数组是通过元素存储每个值
对象存储数据是无序的,可以不分先后顺序;数组存储的数据有序的,可以进行排列。
7.遍历数组元素
依次访问每个元素
for(var k in 数组){ k 下标 数组[k] 元素 } |
for(var i=0;i<数组.length;i++){ i 下标 数组[i] 元素 } |
API:是JS中预定义的函数和方法
一.数组的API
数组中提供的方法
toString() 将数组转为字符串,元素之间用逗号分隔
join() 将数组转为字符串,可以指定元素之间的分隔符号
concat(数组1, 数组2,..) 拼接多个数组
如何学习一个API:作用、参数、返回值 数组API还需要查看原数组是否会发生变化。 |
slice(start, end) 截取数组元素,start开始下标,end结束下标,end为空会截取到最后,如果下标为负数表示倒数,不包含结束的这一项。返回截取到的元素,原数组不会发生变化。
splice(start, count, v1,v2,...) 删除数组元素,start开始下标,count删除的数量,count为空会删除到最后,v1,v2表示要补充的元素,返回删除的元素,原数组会发生变化。
reverse() 翻转数组元素,原数组会发生变化
sort() 对数组元素进行排序,默认是按照编码排列
sort( function(a, b){ return a-b //按照数字从小到大排列 //return b-a 按照数字从大到小排列 } ) |
push() 在数组的末尾添加元素,返回数组长度,原数组会发生变化
pop() 删除数组末尾的一个元素,返回删除的元素,原数组会发生变化
unshift() 在数组的开头添加元素,返回数组长度,原数组会发生变化
shift() 删除数组开头的一个元素,返回删除的元素,原数组会发生变化
indexOf() 检测数组中是否含有某个元素,存在返回下标,不存在返回-1
二.二维数组
用于对一组数据进行二次分类,数组中的元素还是数组
[ [ ], [ ], [ ] ]
三.字符串对象
包装对象:目的是让原始类型像对象一样,具有属性和方法;JS提供了三种包装对象,分别是字符串对象、布尔对象、数字对象
new String() 将一个字符串包装为对象
String() 将一个值转为字符串
1.转义字符
改变字符本身的意义
\' 将具有特殊意义的引号转为普通字符
\n 将字符n转为换行符
\t 将字符t转为制表符(多个连续空格,Tab键功能)
2.API
length 获取字符串的长度
charAt(下标) 通过下标获取某一个字符,也可以使用数组写法 字符串[下标]
练习:遍历字符串javascript,统计出字符a出现次数。
indexOf() 查找某个字符串第一次出现位置,返回下标,找不到返回-1
lastIndexOf() 查找某个字符串最后一次出现位置,返回下标,找不到返回-1
toUpperCase() 英文字母转大写
toLowerCase() 英文字母转小写
所有的字符串API都不会影响到原来的字符串 |
slice(start,end) 截取字符串,start开始的下标,end结束的下标,end为空截取到最后,不包含end本身,下标为负数表示倒数
split() 将字符串转为数组
一.Math对象
数学对象,提供了一组数学运算的API
不需要通过new来创建对象,就可以直接使用API
PI 获取圆周率
abs() 获取绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入取整
pow(x,y) 计算x的y次方
max() 获取一组数字最大值,不能直接写数组
min() 获取一组数字最小值,不能直接写数组
random() 获取随机数,范围>=0 <1
双色球
红球:随机获取1~33之间的6个整数,不能重复,从小到大排列
蓝球:随机获取1~16之间的一个数字,可以和红球重复
将获取的7个数字放入到数组
二.Date对象
用于日期时间的存储和计算
1.创建
new Date('2022/9/6 11:38:30')
new Date(2022, 8, 6, 11, 38, 30) //第2个参数月份存储的值0~11对应1~12月
new Date() //存储当前操作系统的时间
new Date(1630000000000) //存储的是距离计算机元年的毫秒数
2.转为本地字符串
toLocaleString() 存在兼容性问题,只能用于项目开发调试
3.获取存储的值
getFullYear()/getMonth()/getDate()
月份的值0~11
getHours()/getMinutes()/getSeconds()/getMilliseconds()
时 分 秒 毫秒
getDay() 星期 范围0~6 对应日~六
getTime() 获取Date对象时间戳
Date.now() 获取当前时间的时间戳 |
4.设置存储的值
setFullYear()/setMonth()/setDate()
setHours()/setMinutes()/setSeconds()/setMilliseconds()
setTime() 设置时间戳,所有的日期时间都会受到影响
5.拷贝Date对象
new Date(Date对象)
三.Number对象
new Number() 将一个数字包装为对象
Number() 将一个值强制转为数字
toFixed(n) 保留小数点后n位
四.Boolean对象
new Boolean() 将一个布尔值包装为对象
Boolean() 将一个值强制转换为布尔型
!!值 将一个值隐式转换为布尔型
五.错误处理
1.常见错误
语法错误(SyntaxError):出现了中文符号,缺号半块括号等,代码书写不符合语法规范。
引用错误(ReferenceError):使用了未声明的变量
类型错误(TypeError):当前调用的不是一个函数类型
范围错误(RangeError):超出了JS的规定范围,例如:递归使用不当
自定义错误:程序员自己指定的错误
throw 错误内容
2.错误处理
即使出现了错误,不会阻止后续代码执行
try{ 尝试执行,可能会产生错误,出现错误不会阻止后续代码执行 }catch(err){ 一旦try中出现错误,就会捕获错误,将错误信息放入到err中 } |