美文网首页
JavaScript-对象

JavaScript-对象

作者: qh0814 | 来源:发表于2019-02-18 23:59 被阅读0次

    1.概述

    JavaScript的对象是一种特殊又重要的数据类型。从结构上来说,对象就是一些以键值对无序组合起来的数据类型,键名称为属性,键值则是属性的值。从它的内容上看,对象内部可以包含各种类型的数据,这些数据的数据结构可以是number、string甚至一些function,对象内部的function称之为方法。方法可以作为接口给外部调用。相比number、string、boolean等其他数据结构,对象是一种带有属性与方法的复杂数据类型。
    JavaScript自带了多种对象。如:Date对象、Array对象等。

    2.对象的创建

    这里有3种创建对象的方法:
    1.字面量方式

    //创建一个名为role的对象,并定义相关属性及值。
    var role = {
      name:'name'
      HP:'1000'
      MP:'500'
      level:'1'
    }
    

    2.构造函数

    var role = new Object()
    role.HP = '1000'
    //...
    

    3.Object.create

    var a = {
      print:function(){
        console.log('Obj.create')
      }
    }
    var b = Object.create(a)
    Object.getPrototypeOf(b) === a //b对象继承a对象所有的属性和方法
    b.print() // Obj.create
    

    3.属性

    • 对象内部所有属性都是字符串,虽然是字符串,但也不用引号包裹。
    • 如果没有加引号,属性为数字则会自动转成字符串
    • 属性如果不是数字又没有引号的话,需要符合标识符命名规则,否则报错。
    var obj = {
      3s:'sss'  //报错
      '3s':'sss' //不报错
    }
    

    4.对象的操作

    读写属性
    读写属性的方法一是使用 . 运算符,二是使用 [ ] 运算符

    var a = {b:'1'}
    a.b //1
    a['b'] //1
    

    使用[ ]运算符时,里面的属性必须加上引号,否则会跟同名变量冲突

    var a = {b:'1'}
    b='2'
    a[b] //undefined
    

    上图中b没有加引号,所以被当成变量处理,由于a对象里没有‘2’这个属性,所以返回undefined。

    数字键名不能用 . 运算符,因为会被当成小数点,然后报错。

    var a = {123:'123'}
    a.123  //报错
    a[123] //'123'
    
    报错信息

    JavaScript允许创建对象后随时新增属性

    var a = {}
    a.b='c'
    a.b //'c'
    

    Object.keys()方法可以查看对象所有属性

    var a = {b:1,c:2}
    Object.keys(a)  //["b","c"]
    

    delete 命令可以删除对象属性,返回布尔值,若属性不存在返回true,若属性无法删除,则返回false。该命令只能删除自身属性,无法删除继承属性。

    var a = {b:1,c:2}
    Object.keys(a)  //["b","c"]
    delete a.b
    Object.keys(a)  //["c"]
    delete a.c
    Object.keys(a)  //[]
    

    in 运算符判断属性是否存在,但无法判断是否为继承属性,若为继承属性也会返回true

    var a = {b:'b'}
    'b' in a  //true
     b in a //false
    

    for in循环遍历属性

    var a = {b:1,c:2,d:3}
    for(var key in a ){
    console.log('key:',key)
    console.log('value:',a[key])
    }
    //key: b
    //key: 1
    //key: c
    //key: 2
    //key: d
    //key: 3
    

    for in 只会遍历可遍历属性,不可遍历的跳过,同样也会遍历继承属性
    如果想跳过继承属性,hasOwnProperty()方法可以判断是否为自身属性

    同一对象允许被多个变量同时指向,如果其中一个变量改变指向,其他变量不会受到影响。

    var a = {name:'123'}
    var b = a
    a.name //'123'
    b.name //'123'
    b.name='456'
    a.name //'456'
    a = {}
    b.name //'456'
    

    with语句
    当操作一个对象多个属性时,with语句可以提供一些书写方便。

    var a = {a:1,b:2}
    with(a){
      a=2
      b=3
    }
    

    with绑定对象a,然后在同一区块里统一操作属性。但是这样绑定对象不明确,不好判断区块里的是其他变量还是对象的属性,这样不利于代码纠错和模块化。

    相关文章

      网友评论

          本文标题:JavaScript-对象

          本文链接:https://www.haomeiwen.com/subject/vcvzeqtx.html