• 对象


    1.1、除了字符串、数字(直接量或字面量)、布尔类型、null和underfined外,JavaScript的值都是对象。

    尽管不是对象,但字符串、数字和布尔值经常在进行调用的时候被包装起来,所以这些数据类型更像是不可变的对象。如

    'hello'.replace('h', 'H');   //,实际上是 String('hello').replace('h', 'H')

    1.2、对象的属性特性

    ECMAScript5

    •   writable         可写
    •   configurable  可配置
    •   enumerable   可枚举

    1.3、对象特性

    • prototype     原型对象
    • class         类标识,字符串
    • isExtensible  布尔型,可否扩展

    1.4、三种JavaScript对象和两种属性

    • 内置对象  数组、函数、日期、正则表达式等
    • 宿主对象  HTMLElement对象等表示宿主结构的对象,实际上是JavaScprit迁入的宿主对象的内置对象
    • 自定义对象  通过动态代码创建的对象
    • 自有属性  对象中定义的属性
    • 继承属性  从原型对象中继承的属性

    1.5、对象创建

    • 对象直接量  {key : value, key1 : value1},在IE7及之下的版本中直接量不可用逗号结尾,其他版本和其他主流浏览器中将忽略这个逗号
    • new  new Object();
    • 原型对象(prototye)  直接用树形结构,二叉树来理解即可,或者就是族谱,你是你爸妈生的,你的原型对象是你爸妈,往上可以一直迭代到初代。
    • Object.create  ECMAScript5中定义用来创建基于prototype的新对象。

    2.1、属性的查询与设置

    • 通过.和[]
    • 任何时候对属性的设置都是对象属性的设置,而不是原型对象的属性设置,原型对象的属性只有在查询时被读取,相当于一个默认值

    2.2、delete

    • 只是断开属性之间的引用关系,并没有去操作属性的属性。如 delete o.one; 如果o.one里面还有其他属性,并不被删除,只是无法再通过o.one访问
    • 在严格模式下 delete在某些情况下会报错(错误标识、不可配置的属性)

    2.3、检测属性

    • in
    • hasOwnProperty()
    • propertyIsEnumerable()
    • !== underfined

    2.4、遍历属性

    • for in
    • Object.keys()
    • Object.getOwnPropertyNames()

    2.5、属性描述符

    • Object.getOwnPropertyDescriptor()
    • {writable : false,  configurable : false, enumerable : false, value : null}
    • Object.defineProperty() 、 Object.defineProperties()

           - Object.defineProperty(object, 'name', {writable : false,  configurable : false, enumerable : false, value : null})

         - Object.defineProperties(object, {

            one : {writable : false,  configurable : false, enumerable : false, value : 1},

          two : {writable : false,  configurable : false, enumerable : false, value : 2}

                  })

    1. 不可扩展的,可编辑已有属性,不可添加新属性
    2. 不可配置的,不能修改可配置属性和可枚举属性
    3. 存取器不可配置,则不可修改get和set,也不能转换成数据属性
    4. 数据属性不可配置,不能转换成存取器属性,可写性可从true改成false,不能反向转换
    5. 数据属性不可配置且不可写的属性不能修改,可配置不可写的属性值可以修改(可以修改成可写,修改完属性再配置成不可写)。

    扩展了一下一些属性,把代码贴上

    Object.defineProperties && Object.defineProperties(Object.prototype, {
      'extend': {
        writable: true,
        enumerable: false,
        configurable: true,
        value: function (o) {
          // 得到所有的自有属性
          var names = Object.getOwnPropertyNames(o),
          name = null;
          for (var i = 0; i < names.length; i++) {
            name = names[i];
            // 如果属性已经存在,跳过
            if (name in this) continue;
            // 获取属性描述符
            var desc = Object.getOwnPropertyDescriptor(o, name);
            // 用它给this创建一个属性
            Object.defineProperty(this, name, desc);
          }
        }
      },
      'class': {
        enumerable: true,
        configurable: true,
        get : function () {
          return Object.prototype.toString.call(this).slice(8, -1);
        }
      }
    });

    2.6、可扩展性

    • Object.isExtensible()  是否可扩展
    • Object.preventExtensions()  转换成不可扩展
    • Object.seal()  封闭,会将所有自有属性都转换成不可配置的,已经设置为不可写的将无法再更改(无法解封)
    • Object.isSealed()  是否封闭
    • Object.freeze()  冻结所有属性,比seal更严格,把可写的属性也变成不可写的,存取器不受影响
    • Object.isForzen()  是否冻结

    3.1、JSON

    • JSON.stringify()  return string
    • JSON.parse()  return json object
  • 相关阅读:
    【从零开始学Spring笔记】Spring的JDBC模板的使用
    自定义实现HashMap的put、get方法
    ArrayList和LinkedList在中间开始插入的快慢比较
    intellij IDEA导入java源码
    IntelliJ IDEA 创建Spring+SpringMVC+hibernate+maven项目
    IntelliJ IDEA 创建maven管理的webapp项目
    IntelliJ IDEA 创建Spring+SpringMVC+mybatis+maven项目
    线程--实现Runnable接口
    线程--继承Thread
    比较两个List是否相等,长度和内容都相等
  • 原文地址:https://www.cnblogs.com/gabin/p/3808616.html
Copyright © 2020-2023  润新知