javascript深入浅出 对象

 

对象结构

    属性标签:

        可写    writable

        可配置    configurable

        可遍历    enumerable

        获取/设置

            get/set

1
2
3
4
5
6
7
8
9
var obj = {
    $name : null,
    get name(){
        return this.$name+'-fix'
    },
    set name(val){
        this.$name = val;
    }
};

    对象标签:

        [[proto]]

            原型实现继承

        [[class]]

            获取对象类型

1
2
3
function getType(o) {
    return Object.prototype.toString.call(o).slice(8,-1);
}

        [[extensible]]

            isExtensible

                是否可扩展

                阻止扩展    Object.preventExtensions(obj)

            isSealed

                是否可扩展、可配置

                阻止扩展和配置    Object.seal(obj);

            isFrozen

                是否可扩展、可配置、可写

                阻止可扩展、可配置、可写    Object.freeze(obj);

    值:

        value


对象创建

    字面量:

    new构造方法/原型链:

    Object.create(字面量):

        字面量作为原型

对象操作

    属性操作:

        属性读写

            不存在写会报错

            不存在读不报错

        属性删除

            可删除和不存在的返回true

            不可删的会报错

        属性检查

            in    是否存在,包含原型链

1
'x' in obj

            hasOwnProperty    是否存在,不包含原型链

1
obj.hasOwnProperty('x')

            propertyIsEnumberable    是否可以遍历

1
obj.propertyIsEnumerable('x')

        属性标签定义

            字面量定义

                writable,configurable,enumerable默认为true

            使用defineProperty

                writable,configurable,enumerable默认为false

        获取属性标签描述

1
Object.getOwnPropertyDescriptor(对象,'属性')


    序列化:

        json序列化

1
var json_str = JSON.stringify(obj);

        json反序列化

1
var str = JSON.parse(json_str);

        自定义

1
2
3
4
5
6
7
to_json : {
    a : 1,
        b : 2,
        toJSON : function () {
        return this.a+this.b;
    }
}

        注意

            值为undefined 会去掉

            值为NaN,Infinity 转为null

            new Date 转为 UTC格式

    对象转基本类型:

        toString

        valueOf

    ​    ​    ​valueOf 优先toString

    ​    ​    ​定义valueOf

1
2
3
test_o.valueOf = function () {
    return 'value ';
};





posted @ 2017-03-02 21:58  前望  阅读(94)  评论(0编辑  收藏  举报