JS的对象

113 阅读4分钟

31、认识对象

①什么是对象
Js中的一种数据格式   对象在JS中的数据类型数据为:引用数据类型(也有喜欢叫复杂数类型)
②如何向变量中存储一个叫做对象的数据呢?
语法1:var obj = {键值对}
键值对 -> key:value
如果对象内部有多个键值对,那么需要使用逗号隔开
```js
    var obj = { a:100, b:200, c:300, q:999}
    console.log(obj)
```
③什么是键值对(拿对象obj 为例子)
在这个对象中,akey,100为对应value
    另外一种叫法:a为键,100为对应的值
    另外一种叫法:a为属性名,100为对应的属性值
    bkey,200为对应的value
    b为键,200为对应的值
    b为属性名,200为对应的属性值

32、建对象

创建对象 分为两种方式:
    *1.字面量的形式(使用频率比较高)
        语法:var obj = {键值对}
    *2.内置构造函数的创建
        语法1var obj1 = new Object() //创建空对象
        语法2var obj1 = new Object({a: 1, b: 2}) //创建一个具有属性或者说具有键值对的对象
            注意: new Object  的О是大写的,不是小写
*面试官:JS创建对象的方式有哪些?
目前暂时是 两种
    1.字面量的方式
    ```js
        var obj = { 
            a:1, 
            b:2, 
            c:0, 
            d:'abc', 
            e:true,  
            q:undefined, 
            w:null, 
            r:function () {console.log('我是 obj对象内r这个属性的属性值,我是一个函数')}
        }
        console.log(obj)
    ```
    2.内置构造函数的方式 
    ```js
        var obj1 = new Object({ a: 1, q: 777, w: 666, e:'qwer'})
        console.log(obj1)
    ```

33、象的操作(增删改查)

换句话说,就是对内部的属性的操作
    分为两种方式
        1.点语法
        2.中括号语法(数组语法)
*一般来说,大部分场景使用点语法更简单,有一些特殊场景只能使用中括号语法
 一般大部分情况下,点语法与中括号语法,作用相同,怎么选择都可以
 特殊情况下我们需要使用中括号语法
     1,对象的属性名,有纯数字或者特殊符号,这个时候,就只能使用中括号语法
     2.如果涉及变量相关的时候,也需要使用中括号
```js
    //特殊情况1
    var obj = {
      100: '我的属性名 是纯数字100',
      '!': '我的属性名是特殊符号 !',
      '@': '我的属性名是特殊符号 @'
    }
    //此时不能使用点语法,可以使用中括号语法
    console.log(obj.100)//会报错
    console.log(obj[100])
    console.log(obj['!'])//有问题,需要将特殊符号用引号包裹
    console.log(obj['@'])
    
    //特殊情况2
    var obj = {a: 1, b: 2, name: 'QF001'}
    var myName = 'name'
    console.log(obj.myName) //undefined
    原因:obj.myName
    我们猜想他这个myName是一个变量,所以实际的应该是 obj.'name',
    所以应该打印 obj 的name属性,但实际的输出结果是undefined
    因为对象的点语法,会将点后边的字符当成一个字符串去使用,而不会当成变量
    拿obj.myName举例
    他会将 myName 当成一个字符串去对象中查找,有没有一个叫做myName 的属性名
    找完之后发现对象中没有这个属性名,所以打印的值为undefined
    console.log(obj[myName])//QF001
    原因:中括号语法,内部书写的字符,如果不加引号,会把它当成变量去使用,所以找到实际的值之后。myName这个变量对应的值为name
    所以obj[myName]相当于写了obj['name']
    所以会去对象obj中找一个叫做name的属性名,找到之后打印在页面
```

34、for...in遍历对象

for...in 一个循环语句
    对象:一种数据格式
    遍历:一般我们会说'遍历对象'/'遍历数组'
        '遍历对象'想办法拿到对象内部所有的属性名与属性值
   for (var i in 要遍历的对象) { 循环要执行的代码}
*对象关于key的要求 或者说对于属性名的要求 或者说对于键值对的键的要求
1.推荐使用符合变量命名规则与规范的名字
2.对象的 key 也可以使用 纯数字 来当作键名(属性名/key)
3.可以使用任何特殊符号(但是需要使用引号包裹)
!注意:一般只推荐使用第一种,二三了解即可
    var obj = {a: 1, q: 'qwe', t: true, u: undefined}
     for (var i in obj) {
         //console.log(i) //a q t u 这四个是对象obj的所有 属性名/键名/ key
         // console.log(obj.i) 
         //undefined 点语法会将后边的字符当成字符串来使用,而不是当成变量,如果相当变量来使用,那么应该用中括号语法
         console.log(obj[i]) //该对象的所有属性值
    }