object
js中对象,用来存储键值对和更复杂的实体,也可以理解为存储带有键的数据的集合
创建对象的方式
字面量
let 变量 = {
属性(key) = 值 (value),
key1 = value1,
key2 = value2,
}
构造函数
1、定义了一个构造函数:类似定义了模板或画了张图,在内存中不占空间
function student(name,score){
this.name = name
this.score = score
}
this.name中的name表示对象的属性
this.score中的score表示对象的属性
name和score表示函数的参数(形参)
2、使用new创建对象
new是运算符,通过new运算符创建的对象在内存中占用存储空间
let s1 = new Student(‘张三’,98)
3、B/S 结构 C/S结构
1、B/S结构 Brower/Server(浏览器/服务器模式)
2、C/S结构 Client/Server (客户端/服务器模式)
4、数组的结构赋值
1、变量的作用域
2、科学使用下标
5、数组的结构赋值
1、将数组的部分元素赋值给变量:赋值符号的左边必须是变量,变量要放在[]
let arr = [11,22,33]
let a,b
[a,b] = arr
console.log(a)
console.log(b)
2、通过结构来实现变量的交互
let n1 = 4 , n2 = 8
[n1,n2] = [n2,n1];
let 变量 = new Object();
使用关键字new 调用object()函数创建对象,并将对象的地址放入变量中
构造函数:this代表当前的对象
function Student(name,score){
this.name = name
this.score = score
}
let s1 = new Student('张三丰',98)
let arr = []
for(let i = 0; i < 8; i++){
arr[arr.length] = new Student(`A${i + 1},parseInt(Math.random()*100 + 20)`)
}
let max = arr[0].score
let maxIndex = 0
for(let i = 1; i < arr.length; i++){
if(max < arr[i].score){
max = arr[i].score
max = 1
}
}
console.log(arr[maxIndex])
属性和文本
对象的构成
对象的属性类型为:string
属性值:可以为任意类型
读取数据
对象名称,属性名
object.keys(对象名)获取对象的所有属性名称
添加数据
js动态语言,对象可以随时添加数据(键值对)
语法
对象名.新属性名 = 新值
删除数据
delete 对象名.属性名
修改数据
覆盖原数据 重新赋值
对象名。属性名 = 新值
js对象中,属性名为string类型,唯一
属性值为任意类型(函数,对象)
方括号
属性名称中使用方括号可以使用任意字符串
方括号同样提供了一种可以通过任意表达式来获取属性名称的方法
方括号同样提供了一种可以通过任意表达式来获取属性名称的方法
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {
[fruit]: 5, // 属性名是从 fruit 变量中得到的
};
alert( bag.apple ); // 5 如果 fruit="apple"
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {};
// 从 fruit 变量中获取值
bag[fruit] = 5;
let fruit = 'apple';
let bag = {
[fruit + 'Computers']: 5 // bag.appleComputers = 5
};
方括号比点符号更强大。它允许任何属性名和变量,但写起来也更加麻烦。
所以,大部分时间里,当属性名是已知且简单的时候,就使用点符号。如果我们需要
一些更复杂的内容,那么就用方括号。
属性简写
在上面的例子中,属性名跟变量名一样。这种通过变量生成属性的应用场景很常见,
在这有一种特殊的 属性值缩写 方法,使属性名变得更短
function makeUser(name, age) {
return {
name: name,
age: age,
// ……其他的属性
};
}
let user = makeUser("John", 30);
alert(user.name); // John
function makeUser(name, age) {
return {
name, // 与 name: name 相同
age, // 与 age: age 相同
// ...
};
}
let user = {
name, // 与 name:name 相同
age: 30
属性名称限制
自定义的属性名称,默认js都会添加“”成为字符串类型
属性名称没有限制,可以成为任意类型
习惯大家都是按照标识符,命名规范起属性名称了
对象名称:_proto_获取原型对象
判断属性存在
in 操作符
判断属性是否存在
语法:
属性名称 in 对象名称
for - in 遍历对象属性
for(let 变量 in 对象名称){
}
对象的引用和复制
基本类型,变量中保存的是数据本身
引用类型,变量中保存的是对象的地址(引用)
当一个变量传递过程,将变量中保存的“内容”复制一份传递给下一个变量,这个
过程被称为“值传递”
基本类型传递数据本身
引用类型传递地址,会发生多个变量指向同一个对象
当两个对象为同一个对象时,两者才相同,返回true
内置对象
日期对象
new Date(毫秒数)
毫秒数起点:1970-01-01 00:00:00
new Date(字符串)
new Date(year,month,date,hours,minutes,seconds,ms)
year必须为4位,month从0开始到11结束,date,当前月的某一天,默认值为1,
minutes,seconds,ms默认值为0
getDay()获取星期几,对应的是0,1,2,3,4,5,6。
getFullYear()方法,以四位数字形式返回日期 年份。
getMonth() 方法,以数字0-11返回日期的 月份。
getDate()方法,以数字1-31返回当前的 日期。
getHours()方法,以数字0-23返回日期的 小时数。
getMinutes()方法,以数字0-59返回日期的 分钟数。
date.getSeconds()方法,以数字0-59返回日期的 秒数。
date.getMilliseconds()方法,以数字0-999返回日期的 毫秒数
let date = new Date();
console.log('秒数)',date.getSeconds());
设置日期
setFullYear(year, [month], [date])
setMonth(month, [date])
setDate(date)
setHours(hour, [min], [sec], [ms])
setMinutes(min, [sec], [ms])
setSeconds(sec, [ms])
setMilliseconds(ms)
日期差
Date.now(日期对象):转化为以毫秒为单位的数值
返回的对象字符串设置的日期,对应的时间戳
Date.parse(“字符串”):从字符串中获取日期,返回值类型为number
字符串的格式应该为:YYYY-MM-DDTHH:mm:ss.sssZ,其中:
YYYY-MM-DD——日期:年-月-日
字符“T”是一个分隔符
HH:mm:ss.sssZ——时间:小时:分钟:秒.毫秒。
可选字符“Z”为 +-hh:mm 格式的时区。单个字符Z代表UTC + 0时区
原始类型
原始类型和对象之间的区别
原始类型,直接保存数据本身
对象类型,保存数据的地址,通过地址在获取数据本身。
原始类型,保存原始值,7个基本类型的一种
对象类型,存储多个值作为属性
基本类型不能动态添加属性
对象类型可以添加属性
将函数作为属性存储到对象中,被称为方法
js 使用方法过程中,将基本类型转换为对象,使用完毕后转换回原始对象
js内部构造器
String()
Number()
Boolean()
null/undefined 没有任何方法
进制
十六进制 0x
二进制 0b
八进制 0o
方法:
num.toString(base) 返回在给定base进制数字系统中number的字符串表示形式
Math.floor(3.1)向下取整(3)
Math.ceil(3.1)向上取整(4)
Math.around(3.4)四舍五入(3)
Math.trunc()移除小数点后所有内容
toFixed(n)将数字舍入小数点后n位,并以字符串形式返回结果
isNaN(n)将其参数转换为数字,然后测试他是否为NaN
如果为NaN,返回true,否则false
isFinite()将参数转换为数字,如果是常规数字,则返回true,排除NaN
parseInt()/ parseFloat()从字符串中读取数字,知道无法读取为止。
charAt(下标)获取字符下标(base) f 15 ff 255 ffff 65535
charCodeAt(下标)获取字符下标(base) f 15 ff 255 ffff 65535
trim():去除字符串两边空白
str.toUpperCase()返回一个大写字符串
str.toLowerCase()返回一个小写字符串
遍历字符串
for(let key of str){
console.log(key);
}
字符串的不可变性
js中字符串不可更改
查找字符串
str.indexOf(“n”);从给定位置查找字符串,没找到返回-1,找到返回位置索引
str.lastIndexOf(“n”);从字符串末尾开始查找,字符串标号位置不变。
是否包含
str.includes(“abc”) 是否包含,返回true ,说明包含
str.startWith(“abc”)是否以指定字符开头
str.endWith(“abc”)是否以指定字符结尾
获取字符串
slice(start,end)
返回字符串从start开始到end(不包括end)的部分
如果没有第二个参数,从start到结束
start/end也可以为负数,从字符串结尾计算
str = "abcdef";
console.log(str.slice(0,3));abc[)第一位到第三位
console.log(str.slice(3));abc[)从开始到结尾
console.log(str.slice(-2 , -1 ));e[)结尾开始为 -1
console.log(str.slice(-4,-2));cd[)