JavaScript对象和堆栈空间

190 阅读3分钟

1. 对象

对象是引用数据类型,是一种无序的数据集合。对象里面由属性和方法组成,多 个属性或方法间用,分隔,属性名可以用‘’或“”包住,一般省略,重复名称有特殊字符如空格和中横线-

  let 对象名 = {} //对象声明语法
  let person = {}//声明了一个person对象
  
  let 对象名 = {
    属性名 : 属性值
    方法名 : 函数
  }
  //person对象
  let person = {
    username:'andy'
    age:18
    sex:'男'
    sayHi:function(){
      console.log('hello!')
    }
  }
  • 对象的访问:

    对象的属性访问有2种方式,可以使用 . 或[ ]获得对象中的对应值

    console.log('person.username')//第一种
    console.log(person['username'])//第二种
    

    对象的方法访问需要用.来调用

    person.sayHi()
    
  1. 操作对象

    • 增加属性和方法:可以用.和[ ]添加,对象如果有这个属性就相当于重新赋值,没有就相当于动态添加一个

      person.hobby = 'football'
      person['heigh'] = 170
      ​
      person.move = function() {
        document.write('移动一点点')
      }
      //无论是属性或方法,同一个对象中出现名称一样,后面的会覆盖前面的
      
    • 删除对象中的属性:delete 对象名.属性名
  1. 遍历对象

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

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

    使用for循环 k...in来遍历对象,k是对象的属性名,对象名[k]才是属性值

    let person = {
        username:'andy'
        age:18
        sex:'男'
      }
    for (let k in person) {
      console.log(k)//打印属性名
      console.log(person[k])//打印属性值
    }
    
  1. 内置数学对象

    random,ceil,floor,max,min......

    • 生成min-max任意范围的随机数公式

      Math.floor(Math.random()*(m-n+1))+n
      Math.floor(Math.random()*(10+1))//0~10的随机数
      

2. 数据的储存方式

  1. 基本数据类型:

    一共有5种:string, number, boolean, undefined, null,它们也叫值类型。在储存时变量中储存的是值本身,因此叫值类型。

  1. 引用数据类型:

    复杂数据类型,在储存时变量中储存的仅仅是地址(引用),因此叫做引用数据类型,它们分别有:对象,数组,函数

  1. 堆栈空间分配区别:

    • 栈(操作系统):由操作系统自动分配释放函数的参数值、局部变量的值等,基本数据类型放在栈里。

    • 堆(操作系统):储存复杂类型如对象,一般由程序员分配释放,若不释放,由垃圾回收机制回收。引用数据类型存放在堆里面,变量或栈里面存放的是地址,而地址指向堆空间的实际内容。

    • 注意: 由于2种数据类型的空间分配不同,所以如果是基本数据类型的2个变量互相=是赋值,2个变量都是占用的不同栈空间,互不影响。

              // 简单数据类型存储的是   值
              let a = 1
              let b = a
              b = 2
              console.log(b);
              console.log(a);
      

      但是,引用数据类型2=另外一个引用数据类型1的话,会把1的地址给到2,然而1和2都是指向通一个堆空间的内容,所以无论改哪个里的内容,2个都会影响。除非变量2是创建一个新对象。

              let obj1 = {
                  name: '李狗蛋',
                  age: 18
              }
      ​
              let obj2 = obj1
              obj2 = {}
              console.log(obj1);
      

\