JS基础的知识点(3)

78 阅读5分钟

JS中的对象:

       /* 
        1.对象是什么 :  是一种 以键值对方式存储 复杂数据类型
        2.对象和数组异同点 :
            相同点: 都可以存储多个数据
            不同点:  存储方式不同
                数组:有序存储。 下标从0开始递增
                    * 应用 : 存储相同类型的数据(有顺序)
                对象:无序存储。  属性名和属性值一一对应。(键值对)
                    * 应用: 存储不同类型的数据(没有顺序)
        */


        //需求:  存储多个数据.  ( 姓名、年龄、性别 )

        //方案一: 使用多个变量存储
        let name = '小明'
        let age = 20
        let sex = '男'

        //方案二: 使用数组存储多个数据
        //数组一般存储相同数据类型的数据. 
        //如果使用数组来存储不同数据类型的数据,阅读性不高
        let arr = ['张三',20,'男']
        console.log( arr )

        //方案三: 使用对象来存储多个数据
        //对象 一般用于存储 数据类型不同的数据
        let obj = { 
            name:'小明',
            age:20,
            sex:'男'
        }

        console.log( obj )

对象语法:

/* 
      1.对象声明 :
        let 对象名 = {
          属性名 : 属性值 ,
          方法名 : 函数
        }

      2.对象取值 :  对象名.属性名

      3.细节:  对象里面的属性是什么类型, 取出来的时候就可以使用它的语法
        3.1 如果对象里面属性是'数组',就可以使用数组语法:  对象名.属性名[下标]
        3.2 如果对象里面的属性是'函数',就可以使用函数语法:  对象名.方法名()
        3.3 如果对象里面的属性是'对象',就可以使用对象语法:  对象名.属性名.属性名

      如果对象中的属性值是函数对象,我们一般称呼为对象方法
      */

      //1.对象声明
      let obj = {
        name : '小光',
        age : 30,
        sex : '男',
        hobby : ['吃饭','睡觉','搬砖'] ,
        eat : function(){
          console.log(11111)
        },
        friend:{
          name:'ikun',
          age:20,
        }
      }

      console.log( obj )
      //2.对象取值 :  对象名.属性名
      console.log( obj.age )//30
      console.log( obj.hobby )//['吃饭', '睡觉', '搬砖']

      //3.细节:  对象里面的属性是什么类型, 取出来的时候就可以使用它的语法
      console.log( obj.hobby[0] )//'吃饭'
      obj.eat() 

对象操作:

1.查对象属性

    /*
        1.查对象属性特点
            (1)属性名 存在 , 则是获取 属性值
            (2)属性名 不存在 , 则是获取 undefined

        2.对象取值有两种语法
            2.1 点语法:     对象名.属性名
            2.2 []语法 :    对象名[ '属性名' ]   对象名[ 变量名 ]

        3.小节: 如果不需要解析变量,取值用 点语法. 如果需要解析变量,取值用 []语法
        */  
        let obj = {
            name:'小明',
            age:20,
            sex:'男',
        }
        //1.点语法
        console.log( obj.name )//'小明'
        console.log( obj.girlFrined )//undefined

        //2.[]语法:  对象名[ '属性名' ]
        /* 注意点
        如果[]内部有引号, 则解析为属性名
        如果[]内部没有写引号,则解析为变量名
        */
        console.log( obj['name'] )

        let age = 'sex'
        //这里 obj[age] 没有加引号,所以age解析为变量名. age变量中存储的是"sex"
        //(1)先解析age得到字符串"sex"
        //(2)后解析[]  得到 obj["sex"]
        console.log( obj[age] )//'男'
        //这里 obj['age']有引号,所以age解析为属性名。 相当于obj.age
        console.log( obj['age'] )//20

2.新增与修改对象属性

/* 
        1.查询属性
            点语法      对象名.属性名
            []语法      obj['属性名']    obj[ 变量名 ] 
            总结: 需要解析变量的时候使用"[]语法", 不需要就用 "点语法"
        2.修改属性 :对象名.属性名 = 值
        3.新增属性 : 对象名.属性名 = 值
            (1)如果对象属性名存在,则是修改属性值
            (2)如果对象属性名不存在,则是新增属性
        4.删除属性(了解) :  delete 对象名.属性名

        5.遍历对象: 查询对象所有的属性
        */ 

        let obj = {
            name:'张三',
            age:20,
            sex:'男'
        }

        //1.修改属性
        obj.name = '李四'
        
        console.log( obj )

        //2.新增属性
        /* 
        2.1 如果对象属性名存在,则是修改属性值
        2.2 如果对象属性名不存在,则是新增属性
        */
        obj.score = 90
        console.log( obj )

        //3.删除属性:  delete 对象名.属性名
        delete obj.age
        console.log( obj )

对象遍历:

    /* 
      1.查询属性
          点语法      对象名.属性名
          []语法      obj['属性名']    obj[ 变量名 ] 
          总结: 需要解析变量的时候使用"[]语法", 不需要就用 "点语法"
      2.修改属性 :对象名.属性名 = 值
      3.新增属性 : 对象名.属性名 = 值
          (1)如果对象属性名存在,则是修改属性值
          (2)如果对象属性名不存在,则是新增属性
      4.删除属性(了解) :  delete 对象名.属性名

      5.遍历对象: 查询对象所有的属性
        5.1 数组遍历:固定的for循环   for(let i = 0;i<arr.length;i++){ arr[i] }
        5.2 对象遍历:固定的for-in循环  for(let key in 对象名 ){ 对象名[ key ] }
      
      */

      let obj = {
        name: "小明",
        age: 20,
        sex: "男",
        score:88
      }

      for (let key in obj) {
        console.log( key )//循环变量: 属性名
        //思考:  key 是变量,  对象取值需要解析变量,使用什么语法?  obj[ key ]
        console.log( obj[key] )
      }

内置对象:

/* 
      1.内置对象: 由js本身提前写好的对象,里面存储了一些写好的属性和方法,方便开发者直接用
        * 相当于手机提前安装好的软件,我们直接拿来使用即可.
        
      2.Math对象 : 数学对象
      */    
     
      
      //(1)圆周率:  Math.PI 
      console.log( Math.PI )//3.141592653589793

      //(2)绝对值: Math.abs()
      console.log( Math.abs(2) )//2
      console.log( Math.abs(-2) )//2

      //(3)幂运算: Math.pow(x,y)    求x的y次方
      console.log( Math.pow(2,4) )//2x2x2x2 = 16

      //(4)上取整: Math.ceil() 
      console.log( Math.ceil(0.1) )//1
      //(5)下取整: Math.floor() 
      console.log( Math.floor(0.1) )//0

      /* 以下三个使用的会多一些 */

      //求一组数字最大数   Math.max()
      console.log( Math.max(20,80,90,55,100,60) )//100
      //求一组数字最小数   Math.min()
      console.log( Math.min(20,80,90,55,100,60) )//20

      //返回0-1随机小数
      console.log( Math.random() )

      //求1-100整数  
      console.log(  Math.ceil( Math.random()*100 ) )

111.png

数据类型小结:

 /* js数据类型有很多种,分为两大类
       
       1.值类型(简单数据类型string boolean number undefined null) :
            栈中存储数据,赋值拷贝的是数据,修改拷贝后的数据对原数据没有影响.

       2.引用类型(复杂数据类型 array  function  object) :
            栈中存储地址,堆中存储数据。赋值拷贝的是地址,修改拷贝后的数据对原数据有影响

       */

       let num1 = 10
       //拷贝num1的数据  赋值给 num2
       let num2 = num1
       num2 = 100
       console.log( num1,num2)//10  100

       let arr1 = [10,20,30]
       //拷贝arr1的地址  赋值给 arr2
       let arr2 = arr1
       arr2[0] = 100
       console.log( arr1,arr2)//[100,20,30]  [100,20,30]