js基础2
对象像一个容器 可以装不同的属性
1 对象属于一种复合的数据类型 在对象中可以保存多个不同数据类型的属性
2 对象的分类 (内建对象 宿主对象 自定义对象)

栈内存 堆内存

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>对象&&属性名&&属性值</title>
  </head>
  <body>
    <script>
      // 总共有7中数据类型
      // 基本数据类型是 String Number Undefined Null Boolean Symbole
      // 复合数据类型 object
      //   ====================================================================
      var name = '陈恩伊'
      var age = '18'
      var gender = '女'
      //对象可以定义为 对象属于一种复合数据类型 在对象中可以保存多个不同数据类型的属性
      //   ====================================================================
      // 对象的分类
      //内建对象 宿主对象 自定义对象
      //   ====================================================================
      // 使用new关键字调用的函数 被称为构造函数constructor
      //构造函数是专门用来创建对象的函数
      var obj = new Object()
      console.log(typeof obj) //object
      //   ====================================================================
      //在对象中保存的值称为属性
      //1 向对象中添加属性
      //语法:
      //   对象.属性名 = 属性值
      obj.name = '孙悟空'
      obj.gender = '男'
      obj.age = 18
      console.log(obj)
      //2 读取属性
      //语法:
      //    对象.属性名
      console.log(obj.name)
      console.log(obj.gender)
      console.log(obj.age)
      console.log(obj.hello) //undefined 如果读取对象中没有的属性 不会报错 而是会返回undefined
      //3 修改属性 和 添加属性是一样的语法
      obj.name = '陈恩伊'
      console.log(obj.name)
      //4 删除属性
      //语法:
      //   delete 对象.属性名
      delete obj.name
      console.log(obj.name) //undefined 就说明name这个属性已经被删除 不存在了

      //   ====================================================================
      //对象的属性名&&属性值
      //如果使用的是特殊的属性名 是不能采用点的方式来操作的
      //   需要使用另一种方式
      //语法:
      //    对象["属性名"] = 属性值
      //读取时也需要采用这种方式
      var obj = new Object()
      obj['123'] = 789
      console.log(obj[123])
      //使用[]这种方式去操作属性 更加的灵活
      //在[]中可以直接传递一个变量 这样变量的值是多少就会读取那个属性
      obj['name'] = '陈恩伊'
      var a = 'name'
      console.log(obj[a]) //'陈恩伊'

      //属性值
      //js对象的属性值可以是任意的数据类型
      obj.test = null
      obj.test = undefined
      console.log(obj.test)

      obj2 = new Object()
      obj2.name = '李栋旭'
      //将obj2作为obj的属性值
      obj.test = obj2
      console.log(obj) //{{test:{...}}}
      console.log(obj.test) //{name:'李栋旭'}
      console.log(obj.test.name) //李栋旭
      console.log(typeof obj.test.name) //string
      //   ====================================================================
      //通过 in运算符 可以检查一个对象中是否含有指定的属性
      //如果有就返回true 没有则返回false
      // 语法:
      //`   '属性名' in 对象
      //检查obj中是否含有test2属性
      var obj3 = new Object()
      console.log('test2' in obj3) //false


    </script>
  </body>
</html>