js对象

a.  js对象都是关联数组

b.  inherit();返回一个继承自原型对象p的属性的新对象

 

 

对象的方法:

  创建(create)  设置(set)  查找(query) 删除(delete)  检测(test)和枚举(enumerate)

创建对象的方法:

  对象直接量  关键字new  es5中的Object.create()

  var aa=Object.create({"x":0,"y":1})

属性的读取和修改:

  1.通过 . 连接            属性不可以改变,不能在运行时更改

  2.通过object['xxx'];   属性可以是变量,比如  object['xx'+a];   a可以是个变量,这样属性就不确定了,可以在运行中更改

  3.查询一个没有的属性会返回undefined

  4.查询一个对象的属性,如果对象不存在,就会抛出一个错误。如果查询某对象的属性,不让他报错可以这样:

    var a=b&&b.c&&b.c.d;

属性的删除

  1. delete只能断开宿主与宿主对象的联系,而不会去操作属性中的属性,不能删除通过变量声明或函数声明创建的全局全局对象属性,成功返回true,失败返回false

    delete a.b//a不再拥有属性b

    delete a['b']//a不再拥有属性b

属性的检测

  1.in运算符,hasOwnProperty(),propertyIsEnumerable()

    in左侧属性名,有侧是对象如果对象的自有属性或继承属性包含这个属性就返回true,否则false

    var a={x:1}     a.hasOwnPreperty('x');//true

    propertyIsEnumerable()是hasOwnPreperty()的增强版,只有属性是可枚举的,并且属于这个对象,才返回true

  2.最简单的方法!==是否为undefined

属性的枚举

  1.在代码中给对象添加的所有属性都是可枚举的,在for/in中我们需要跳过一些属性

    for(p in o){

      if(!o.hasOwnproperty(p)) continue ;//跳过继承属性

    }

    for(p in o){

      if(typeof o[p]==="function") continue ;//跳过方法

    }

  2.在es5中多了两个函数

    Object.keys();//返回一个数组,这个数组由对象中可枚举的自有属性组成

    Object.getOwnPropertyNames();//返回对象中所有自有属性的名称

属性getter和setter (存取器属性)

  1.var 0={

    a:1,//普通的数据属性

 

    //存取器属性都是成对定义的函数

    get b(){这里是函数体},

    set c(){这里是函数体}

          }

对象的三个属性

  1.原型属性:

    var p={x:1};//定义一个原型对象

    var o=Object.create(p);使用这个原型创建一个对象

    p.isPrototypeOf(0);//true,o继承自p

    Object.prototype.isPrototypeOf(o);//p继承自Object.prototype

  2.类属性

  3.可扩展性  通过把对象传入Object.esExtensible()判断对象是否是可扩展的

    Object.prevenExtensions()将带转换的对象作为参数传进去,就会变成不可扩展的,注意,转换成就不能转换回来了

    Object.seal()不仅能够把对象设为不可扩展,而且能把其自身的的所有自有属性设为不可配置

    isSealed()检测对象是否封闭

    Object.freeze()  冻结,不光不可配置,而且止咳可读

    Object.isFrozen()  检查对象是否冻结

 

对象序列化

  1:JSON.stringify();//转换为JSON字符串

  2::JSON.parse();//转换为对象

对象方法:

  1.toString();

  2.toLocaleString();

  3.toJSON();

  4:valueOf();

    

 

  

 

posted @ 2017-06-27 11:59  王汉炎  阅读(250)  评论(0编辑  收藏  举报