JavaScript概念(七)

116 阅读2分钟

JavaScript

对象

一、什么是对象

1.对象(object):JavaScript里的一种数据类型,可以理解为是一种无序的数据集合

①用来描述某个事物,例如描述一个人 人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能 ②如果用多个变量保存则比较散,用对象比较统一 比如描述 班主任 信息: 静态特征 (姓名, 年龄, 身高, 性别, 爱好) => 可以使用数字, 字符串, 数组, 布尔类型等表示 动态行为 (点名, 唱, 跳, rap) => 使用函数表示

2.对象的特点:无序集合、可详细的描述描述某个事物

二、对象使用

1.目标:掌握对象语法,用它保存多个数据

2.对象声明语法

let 对象名 = {}

//声明一个person的对象
let person= {}


3.对象的基本使用

    <script>
      let person = {
        herName: "dasj",
        age: 24,
        height: "155cm",
      };
      // 打印一下 这个数据的类型
      console.log(typeof person);
      // 打印一下 这个数据
      console.log(person);
    </script>

4.访问单个属性写法:

①对象名.属性名

②对象名['属性名']

    <script>
        // 对象名 goods   属性名 name price size
      let goods = {
        name: "小米",
        price: 1999,
        size: "XIAOMI-13",
      };
      // 访问单个属性写法 对象名.属性名
      console.log(goods.name); // 小米
      console.log(goods.price); // 1999
      console.log(goods.size); // XIAOMI-13

      console.log(goods.siez); // 如果访问一个不存在的属性siez 会提示undefined

      document.write(
        `品牌:${goods.name} <br>价格:${goods.price} <br>型号:${goods.size} `
      );

      // 访问单个属性写法 对象名['属性名']
      console.log(goods["name"]); // 小米
      console.log(goods["price"]); // 1999
      console.log(goods["size"]); // XIAOMI-13
    </script>

③属性访问案例

    <script>
      let name = "color";
      let person = {
        name: "海贼王",
        color: "red",
      };
      // 访问它
      console.log(person.name); //海贼王
      console.log(person["name"]);
      // person["name"]
      console.log(person["color"]); // yellow

      console.log(person[name]); // yellow 中括号里 代码没有加字符串 表示一个变量
      console.log(person["color"]); // yellow

      console.log(person[color]); // 报错 color是一个变量  没有这个变量  报错
      console.log(person.gafsad); //undefined
    </script>

5.对象有属性和方法的组成

①属性:信息或叫做特征(名词),比如 手机尺寸、颜色、重量等

②方法:功能或叫做行为(动词),比如 手机打电话 发短信 玩游戏等

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


    <script>
      let person = {
        name: "andy",
        sayHi: function (msg) {
          document.write(msg);
          return "来自person的问候";
        },
      };

      // 方法 其实是一个函数
      // 函数 是接收参数
      // 函数 有返回值
      // 函数的使用 函数()
      // 对象访问方法    对象名.方法()如 下
      person.sayHi("大家好<br>");
      person.sayHi("hello<br>");
      let result = person.sayHi("hello123");

      console.log("=========");
      console.log(result);
    </script>

6.属性需注意事项

①属性成对出现,包括属性名和属性值,以 : 隔开

②属性之间 以 , 隔开

③属性是依附在对象上的变量,外面叫做变量 对象内称之为属性

④属性名可使用 “ ” 或者 ‘’ ,一般情况下可省略,除非名称遇见特殊符号 如 空格 中横线等

三、操作对象

1.对象本质是无序的数据集合, 操作数据无非就是 增 删 改 查

①查(重新赋值): 对象名.属性名 、 对象名['属性名'] 、 对象名.方法()

②改(重新赋值): 对象名.属性名= 值 、 对象名.方法()= function() {}

③增(对象添加新的数据):对象名.新属性名称 = 新值

    <script>
      //   let person = {
      //     name: "程序猿",
      //   };
      // 增加一个属性
      //   person.name = "普通人";

      // 修改
      //   person.name = "普通人";

      // 增加属性和修改属性都是同样的写法
      // 如果该属性的对象没有 表示新增
      // 如果该属性的对象存在 表示修改

      // 新增方法
      let person = {};

      // 新增一个方法 匿名函数 固定写法
      person.sayHi = function () {
        document.write("这个是我们新增的sayHi方法");
      };

      person.sayHi(); // 调用方法
    </script>

④删(删除对象中的属性):delete 对象名.属性名

    <script>
      // 声明一个对象
      let person = {
        username: "海贼王",
      };

      // 不想看了  给删除掉
      delete person.username; // 删除对象中的  username属性

      console.log(person.username); // undefined
    </script>

四、遍历对象

1.目标:能够遍历输出对象里面的元素

2.遍历对象 ①对象没有像数组一样的length属性,所以无法确定长度

②对象里面是无序的键值对, 没有规律. 不像数组里面有规律的下标

3.语法

let 对象名 = {
    属性名1:属性值1,
    属性名2:属性值2,
    属性名3:属性值3,
    方法:函数名(){}
}

// k 可理解为 属性名的数组
for (let k in 对象名) {
    console.log(k)   // 打印属性名
    console.log(对象名[k])   // 打印属性值
}

4.案例

①案例一

    <script>
      let person = {
        name: "adada",
        age: 18,
        height: 180,
      };
      // 遍历对象 for in
      for (let aa in person) {
        // console.log(aa) //查找变量aa
        // console.log(person.aa) // 查找对象中 属性名'aa'
        // console.log(person['aa']])  // 查找对象中 属性名'aa'

        // aa 表示变量  aa='name'
        // console.log(person[aa]);
        //person['name']  // aa 表示变量 aa='name'

        console.log(`属性名:${aa} 属性值:${person[aa]}`);
      }
    </script>

②案例二---对象---学生列表

     <script>
      // 填充的内容  由数组构成
      let students = [
        { name: "小明", age: 18, gender: "男", hometown: "河北省" },
        { name: "小红", age: 19, gender: "女", hometown: "河南省" },
        { name: "小刚", age: 17, gender: "男", hometown: "山西省" },
        { name: "小丽", age: 18, gender: "女", hometown: "山东省" },
      ];
      //通过table标签 将固定部分表头确认,后通过遍历 将表格进行拼接
      let tabltHTML = ` <table border="1" > <thead> <tr> <th>序号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>家乡</th> </tr> </thead> <tbody> `;

      // 遍历生成 tr
      for (let index = 0; index < students.length; index++) {
        // 开头
        tabltHTML += `<tr><td>${index + 1}</td> `;
        // <td>${index + 1}</td>
        // 对 对象 做 forin遍历  students[index]
        for (let k in students[index]) {
          // person[k]  person =  students[index]
          let person = students[index]; // 数组中的每一个对象
          // tabltHTML += ` <td>${students[index][k]}</td> `;
          tabltHTML += ` <td>${person[k]}</td> `;
        }

        //  结尾
        tabltHTML += `</tr>`;
      }

      tabltHTML += ` </tbody> </table>`;
      document.write(tabltHTML);
    </script>

五、内置对象

1.什么是内置对象:JavaScript内部提供的对象,包含各种属性和方法给开发者调用(已见得document、console也是内置对象)

2.内置对象Math:Math对象是JavaScript提供的一个“数学高手”对象,且提供了一系列做数学运算的方法,方法如下:

①random:生成0-1之间的随机数(包含0不包括1)------ Math.random(解析:返回一个随机数 包含0 不包含1) ②ceil:向上取整 ------ Math.ceil ③floor:向下取整 ------ Math.floor ④max:找最大数 ------ Math.max ⑤min:找最小数 ------ Math.min ⑥pow:幂运算 ------ Math.pow(解析:Math.pow(a,b),a为底数,b为指数,即a的b次方) ⑦abs:绝对值 ------ Math.abs

3.案例---生成任意范围的随机数

    <script>
      // 随机生成0-10的数字
      console.log(Math.random() * 10);

      // 随机生成5-10的数字
      console.log(Math.random() * 5 + 5);

      //随机生成n-m的数字
      let max = +prompt("请输入数字");
      let min = +prompt("请输入数字");
      console.log(Math.random() * (max - min) + min);
    </script>

4.案例---随机点名器

①设置数组name,具有length长度,name[0]、name[1]...name[name.length-1]

②通过内置对象Math的数学算法分析:如范围区间内0-10,包含0 不包含10,若要其数值为10,需用到四舍五入round(Math..ceil)-------因此,需搭配任意数random------Math.round(Math.random()

③将数组看做一个区间(0---name.length-1),则区间内,任意值算法:Math.round(Math.random() *(name.length-1))

④根据需求,由于点名不能够重复,则需设置循环即数组长度>0,则可一直循环下去,添加.splice()

    <script>
      let name = ["特等奖", "一等奖", "二等奖", "三等奖", "优秀奖", "谢谢参与"];

      // 名字随机输出
      // name[0]
      // name[1]
      // name[2]
      // name[3]
      // name[4]
      // name[5] undefined
      // 数组长度有关系

      // 要计算  0 - 5 随机数
      // let num = Math.round(Math.random() * 5);

      // console.log(name[num]);
      function getNum(max, min) {
        return Math.round(Math.random() * (max - min) + min);
      }

      // 获取一次 随机数
      //   let num = getNum(0, name.length - 1);
      //   console.log(name[num]);
      //   // 删除数组中某一个元素
      //   name.splice(num, 1);

      //let num2= getNum(0, name.length - 1);
      //console.log(name[num2]);
      //name.splice(num, 1);

      // console.log(name)  输出看是否已经删除

      //死循环 只要数组长度>0   代码将重复执行
      while (name.length > 0) {
        let num = getNum(0, name.length - 1);
        console.log(name[num]);
        document.write(`<p>${name[num]}</p>`);
        name.splice(num, 1);
      }
    </script>

六、基本数据类型和引用数据类型

1.目标:了解基本数据类型和引用数据类型的存储方式

2.简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。

①值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null

②引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

3.堆栈空间分配区别

①栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈---------简单数据类型存放到栈里面

②堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。 ---------引用数据类型存放到堆里面

95c50a44eabcb8d2dc8065a05b962d1.png

176e8ac8ae7c5a9a59d02e8041c2f1b.png

4.复杂类型的内存分配!

①引用类型(复杂数据类型):通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等 ②引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中