1.为什么要用对象?

变量 :

只能存储一个值

数组 :

可以存储多个值 但是不能描述年龄.姓名… 很难区分

对象 :

可以理解为一种无序的数据集合 ,可以详细描述某个事物 ,现实中的任何事物 , 都可以通过代码的形式描述出来

2.通过字面量创建对象

1.对象的组成:

对象由属性和方法组成:
属性:信息或者特征(名词)
方法:功能或行为 (动词)

格式:
属性名与属性值之间用:分隔
多个属性用逗号分隔,

2.对象声明:

let 对象名={
属性名:属性值,
方法名:函数
}

  1. let person = {
  2. name: '张学友',
  3. sayHi: function () {
  4. console.log('hi~~')
  5. },
  6. mtv: function (s) {
  7. console.log(s);
  8. }
  9. }
  10. //访问属性 得到值 对象.属性名
  11. console.log(person.name);
  12. //访问属性 得到值 对象['属性名']
  13. console.log(person['name']);
  14. //访问方法 对象.方法名()
  15. person.sayHi();
  16. //传参
  17. person.mtv(2);
  18. // 对象只能通过console.log 打印 不能在浏览器打印

属性名字可以加双引号也可以不加双引号。//一般不加

3.对象访问属性的两种方式

1.属性访问

对象.属性名
对象[‘属性名’]

  1. // 两者方式有什么区别?
  2. // 1.点后面的属性名一定不要加引号
  3. // 2.[]里面的属性名一定要加引号
  4. //后期不同使用场景会用到不同的写法

2.方法访问

对象.方法

对象中的方法:
数据行为性的信息称为方法,一般是动词性的,其本质是函数
方法是依附在对象中的函数

  1. let x = {
  2. name: 'dx',
  3. age: 18,
  4. sing: function () {
  5. return '你好'
  6. },
  7. shoaw: function (str) {
  8. document.write(str)
  9. }
  10. }
  11. let a = x.name //对象也可以用变量接收 测试..
  12. console.log(a);//dx
  13. console.log(x.name)//dx
  14. console.log(x.age);//18
  15. console.log(x.sing());//你好
  16. x.shoaw('实参传参')
  17. //对象里的方法也可以传递参数

3. 对象中增删改查

  1. //1.创建一个空的对象
  2. let obj = {
  3. uname: '刘备',
  4. }
  5. //2.增 : 动态的给对象添加属性
  6. // 改 : 直接给对象里面的属性赋值
  7. obj.uname = '曹操';//改
  8. obj.age = 58;//增
  9. obj['sex'] = '男'//增
  10. console.log(obj) //obj
  11. //3.给对象添加方法
  12. obj.say = function () {
  13. console.log('打刘备')
  14. }
  15. obj.say();//打刘备
  16. //4.删除对象属性 delete 对象.属性名
  17. delete obj.uname//删
  18. console.log(obj.uname)//uname 已被删除除 返回undefind

4. 数组对象

  1. //数组 里面可以存放任何的数据类型
  2. let arr = [ ]
  1. //数组对象
  2. let students = [
  3. { name: '小明', age: 18, gender: '男' },
  4. { name: '小刚', age: 19, gender: '男' },
  5. { name: '小红', age: 20, gender: '女' },
  6. ]
  7. console.log(students[1].name);//小明
  8. // 怎么得到小明的名字
  9. //student[0] === 得到对象1
  10. //打印
  11. for (let i = 0; i < students.length; i++) {
  12. console.log(students[i].name);//小明 小刚 小红
  13. console.log(students[i].age);//18 19 20
  14. }

5. for …in 循环

  1. 遍历对象 : 一般对象里的方法不遍历
  2. for…in 语句用于对数组或者对象的属性进行循环操作。
  3. for … in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
    语法:

for (let 变量 in 对象){
//在此执行的代码
}
“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。

  1. let obj = {
  2. uname: 'dx',
  3. age: 27,
  4. sex: 'girl',
  5. do: function () {
  6. return 'study';
  7. }
  8. }
  9. // k是 变量 便是对象里面的属性名
  10. for (let k in obj) {
  11. console.log(k); //得到每个属性名
  12. //console.log(obj.k) //变成了属性访问 对象.属性名 意思是找到obj里面的k属性 但是 k是不存在obj对象里的 所以会出现undefind
  13. //console.log(obj.['k']) //变成了属性访问 对象['属性名'] 意思是找到obj里面的k属性 但是 k是不存在obj对象里的 所以会出现undefind
  14. console.log(obj[k]); //
  15. //为什么这么写?
  16. //得到的是带字符串的属性名
  17. // console.log(typeof k);
  18. //k 等同于obj里面的每一个属性 k== uname k== age k==sex
  19. // obj[k] === obj['uname'] === obj['age'] === obj['sex']
  20. }

6.Math内置对象

Math.random 取随机数
  1. //Math.random() 生成随机数 [0,1); 包含0但不包括1之间的数
  2. function getRandomIntInclusive(min, max) {
  3. min = Math.ceil(min);
  4. max = Math.floor(max);
  5. return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
  6. }
  7. let random = getRandomIntInclusive(1, 10);
  8. console.log(random);
  1. console.log(Math.abs(-10));//10 取绝对值
  2. console.log(Math.min(1, 2, 4, 32, 4))//1 取一组数里面的最小值
  3. console.log(Math.max(3, 32, 31, 3));//32 取一组数里面的最大值
  4. console.logMath.ceil(10.1)//11 向上取整
  5. console.logMath.floor(10.1)//10 向下取整

随机点名案例:

  1. let arr = ['赵云', '黄总', '张飞', '马超', '刘备', '曹操']
  2. //2.调用随机数函数传入参数 参数是数组的第一位到第最后一位 用变量接收 uname是数字 arr[uname]是数组的元素
  3. let uname = getRandomIntInclusive(0, arr.length - 1)
  4. console.log(arr[uname]);
  5. //3.输出
  6. // console.log(arr[uname]);
  7. // 4.为了保证每次点名不重复 需要将自身给删除 数组删除用 arr.splice
  8. console.log(arr.splice(uname, 1));
  9. console.log(arr);
  1. let random = getRandomIntInclusive(1, 10)
  2. // 1. 需要随机生成 1~10之间的数字
  3. // 2. 开始循环 ----> 有一个弹出框 让用户输入数字
  4. // 3. 拿随机生成的数字与 用户输入的数字比较 如果用户输入的数字比 随机生成的数字要大 则提示 猜大了
  5. // 3. 拿随机生成的数字与 用户输入的数字比较 如果用户输入的数字比 随机生成的数字要小 则提示 猜小了
  6. // 3. 拿随机生成的数字与 用户输入的数字比较 相等 提示用户猜对了 退出循环
  7. while (true) {
  8. let num = +prompt('请输入数字');
  9. if (num > random) {
  10. alert('猜大了')
  11. } else if (num < random) {
  12. alert('猜小了')
  13. } else {
  14. alert('猜对了,太🐮了')
  15. break;
  16. }
  17. }

打乱数组:

  1. let arr = [0, 1, 2, 3, 4];
  2. for (let i = 1; i < arr.length; i++) {
  3. let random = Math.floor(Math.random() * (i + 1));
  4. [arr[i], arr[random]] = [arr[random], arr[i]];
  5. }
  6. console.log(arr)

7.值传递与引用传递

空间小 读取速度快 : 简单数据存储到栈
空间大 读取速度慢 : 复杂数据存储到堆
JavaScript基础篇-05 (对象) - 图1

JavaScript基础篇-05 (对象) - 图2
JavaScript基础篇-05 (对象) - 图3

  1. // 值传递:将一个变量的值赋值给另外一个变量 然后修改其中某一个变量的值 不会影响到另外一个变量
  2. let a = 10;
  3. let b = a;
  4. a = 20;
  5. console.log(b)//10
  6. // 引用传递:将一个变量的值赋值给另外一个变量 然后修改其中某一个变量的值 会影响到另外一个变量
  7. let obj1 = {
  8. uname: '齐天大圣'
  9. }
  10. let obj2 = obj1
  11. obj2.uname = '猪八戒'
  12. console.log(obj2.uname)//猪八戒
  13. console.log(obj1.uname)//猪八戒

JavaScript基础篇-05 (对象) - 图4

每日鼓励自己一句话:
JavaScript基础篇-05 (对象) - 图5