JavaScript基础第七天

159 阅读5分钟

对象

对象概念

①对象(object):JavaScript里的一种数据类型

②可以理解为是一种无序的数据集合

③用来描述某个事物,例如描述一个人

  • 人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能

  • 如果用多个变量保存则比较散,用对象比较统一

④比如描述 班主任 信息:

  • 静态特征 (姓名, 年龄, 身高, 性别, 爱好) => 可以使用数字, 字符串, 数组, 布尔类型等表示

  • 动态行为 (点名, 唱, 跳, rap) => 使用函数表示

对象使用

①声明对象

let 对象名 = {}

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

②对象有属性和方法组成

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

  • 方法:功能或叫行为(动词)。 比如 手机打电话、发短信、玩游戏…

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

③属性

数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。

  • 属性都是成 对出现的,包括属性名和值,它们之间使用英文 : 分隔
  • 多个属性之间使用英文 , 分隔
  • 属性就是依附在对象上的变量(外面是变量,对象内是属性)
  • 属性名可以使用 "" 或 '',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
<script>
        let person = {
            userName : 'leilei',
            age : 18,
            sex : '女',
            hobby : 'eat',
        }
        console.log(typeof person);
        console.log(person);
    </script>

④属性访问

声明对象,并添加了若干属性后,可以使用 . 或 [ ] 获得对象中属性对应的值,我称之为属性访问。

简单理解就是获得对象里面的属性值。

<script>
        let goods = {
            goodsName : '小米',
            goodsPrice : 1999,
            goodsSize : '小屏幕',
        };
		//表达一
        console.log(goods.goodsName);
        console.log(goods.goodsPrice);
        console.log(goods.goodsSize);
		//表达二
        document.write(`手机名称${goods['goodsName']},价格${goods['goodsPrice']},型号${goods['goodsSize']}`)
    </script>

⑤对象中的方法

数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。

  • 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
  • 多个属性之间使用英文 , 分隔
  • 方法是依附在对象中的函数
  • 方法名可以使用 "" 或 '',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
let person = {
            name : 'leilei',
            sayHi : function (lala) {
                document.write(lala);
                return '打声招呼吧'
            }
        }

⑥对象中的方法访问

声明对象,并添加了若干方法后,可以使用 . 调用对象中函数,我称之为方法调用

注意:千万别忘了给方法名后面加小括号

<script>
        let person = {
            name: 'leilei',
            sayHi: function (lala) {
                document.write(lala);
                return '打声招呼吧'
            }
        }
		//对象名.方法名
        person.sayHi('你好<br>');
        person.sayHi('hello');
        let result = person.sayHi('hi~~');
        console.log(result);
    </script>

操作对象

①查询对象

  • 对象.属性 或者 对象[‘属性’]
<script>
        let person = {
            username : '海贼王',
            color : 'yellow',
        };
        //两种查看方式
        console.log(person.username); //常用
        console.log(person['username']);//少用
    </script>
  • 对象.方法()
<script>
        let person = {
            name : 'leilei',
            sayHi : function (lala) {
                document.write(lala);
            }  
        }
	    person.
        person.sayHi('你好<br>');//查对象方法
        person.sayHi('hello');
    </script>

②重新赋值

  • 对象.属性 = 值
  • 对象.方法 = function() {}
<script>
        let person = {
        username : '阿猫',
    };
    //修改(若该属性已有值,则会替换原来的属性)
    person.username = '咩咩'
    console.log(person);
    </script>

③对象添加新的数据

​ 注:无论是属性或是方法,同一个对象中出现名称一样的,后面的会覆盖前面的

  • 对象名.新属性名 = 新值
<script>
        let person = {
        username : '阿猫',
    };
    //增加一个新的属性
    person.userName = '阿狗';
    console.log(person);

    //新增方法也是可以的
    // 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>

遍历对象

定义:

  • 对象没有像数组一样的length属性,所以无法确定长度
  • 对象里面是无序的键值对, 没有规律. 不像数组里面有规律的下标
  • 语句:for in
<script>
        let person = {
            name : 'leilei',
            age : 12,
            weight : 95,
        };
        //遍历对象 for in
        for (let k in person) {
           // console.log(person.k);  //错误写法,会找对象中 属性名为 "k"  
           //console.log(person['k']);//错误写法,会找对象中 属性名为 "k"  

           console.log(person[k]);//正确:k不加引号
        }
    </script>

注意:

一般不用这种方式遍历数组、主要是用来遍历对象

一定记住: k 是获得对象的属性名对象名**[k]** 是获得 属性值

内置对象

①内置对象Mach

  • Math对象是JavaScript提供的一个“数学高手”对象

  • 提供了一系列做数学运算的方法

  • 方法有:

    random:生成0-1之间的随机数(包含0不包括1)

    ceil:向上取整

    floor:向下取整

    round:四舍五入

    max:找最大数

    min:找最小数

    pow:幂运算

    abs:绝对值

<script>
        //生成0-1的随机数 (包含0不包括1)
        console.log(Math.random());

        //向上取整
        console.log(Math.ceil(0.01));//1

        //向下取整
        console.log(Math.floor(6.6));//6

        //四舍五入
        console.log(Math.round(8.5));//9

        //找最大数
        console.log(Math.max(6, 8, 66, 53, 22, 9));//66

        //找最小数
        console.log(Math.min(6, 8, 66, 53, 22, 9));

        //幂运算
        console.log(Math.pow(3, 3));//3的立方
        console.log(Math.pow(3, 2));//3的平方

        //绝对值
        console.log(Math.abs(-3));//3
       
        //如何生成0-10的随机数呢?
        console.log(Math.round(Math.random() * 10 ));

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

        //如何生成N-M之间的随机数
        console.log(Math.ceil(Math.random() * (M - N) + N)) ;
    </script>

拓展

术语解释

术语解释举例
关键字在JavaScript中有特殊意义的词汇let、var、function、if、else、switch、case、break
保留字在目前的JavaScript中没意义,但未来可能会具有特殊意义的词汇int、short、long、char
标识(标识符)变量名、函数名的另一种叫法
表达式能产生值的代码,一般配合运算符出现10 + 3、age >= 18
语句一句代码也称之为一条语句,一般按用途还会分类:输出语句、声明语句、分支语句

拓展:数据类型(栈、堆)

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

  • 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型

    string ,number,boolean,undefined,null

  • 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型

  • 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

堆栈空间分配区别:

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

简单数据类型存放到栈里面:string ,number,boolean,undefined,null

1649153865229

(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。

引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中:Object、Array、Dat

1649153876937

<script>
      /*   
      栈 
        1 适合存放具体具体大小的数据, 这一些数据一般变化不会太大 
          let num =100; 
          let show=true;
          let msg="你好";

      堆 
        1 适合存放可能会经常改变大小的数据,这一些数据变化比较大
          let person={}

          person.name="悟空"  // 增加数据的属性

          delete person.name  // 删除了数据的属性

          let arr=[];

          for 100次  arr.push(index) //  数组 被修改的比较多了
          arr.splice(3,1)// 修改元素了 

      只要我们开始声明一个变量 ,内存中就开始开辟了空间 
       let a=100 ;//  有a在, 开辟空间 来存放变量  (写代码 故意写了很多个 let 。。。。 浪费内存 性能下去)

      两个都是存放数据的地方 
      */

      let num = 100; // 基本数据类型  放心的是复制吧 新旧两个数据 互不影响
      let num2 = num;
      num2 = 10000;
      console.log(num); // 100 互不影响

      let person={username:"悟空"};// 引用数据类型

      let person2=person;  // 引用地址的传递 复制而已  新旧数据 本质是一样的  会收到影响 

      person2.username="八戒";
      console.log(person);// 也是八戒 新旧数据 本质是一样的
    </script>
    

补充(switch-case 和do-while)

条件语句switch-case

①switch-case 功能和 if else-if else 一模一样

②switch-case-break-defaul

  • switch(day) 想要对 day做判断
  • case 1 : day ===1 满足条件
  • break 打断当前的case
  • default 如果以上的 case 都不满足,最终 执行default里面的代码
<script>
        //跟if else 的用法一致
        let day = 2;
        switch (day) {//要判断谁
            case 1://与if(day === 1)一样
                console.log('吃蛋糕');//执行1的业务逻辑
                break;
            case 2:
                console.log('吃草莓');
                break;
            case 1:
                console.log('吃芒果');
                break;
            default:
                //以上都不满足就执行代码
                console.log('不吃了');
                break;
        }
    </script>

do-while循环

①循环 3种写法

  • for 循环
  • while 循环
  • do while 循环 很少 先执行一次 do里面的代码,然后再去执行while里面的程序 哪怕 while里面的条件不成立 也会先执行一次do中的代码
<script>
      let index = 0;
      do {
        console.log('执行了do 里面的代码',index);
        index++
      } while (false);
    </script>