成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript引用類型---Object

RobinTang / 2270人閱讀

摘要:一對(duì)象初始化創(chuàng)建對(duì)象的兩種方法對(duì)象初始化器或?qū)ο笞置媪繀?shù)成對(duì)的名稱字符串與值任何值,其中名稱通過(guò)冒號(hào)與值分隔之后簡(jiǎn)化了字面量寫法寫法以構(gòu)造函數(shù)形式來(lái)調(diào)用參數(shù)任何值訪問(wèn)對(duì)象屬性對(duì)象屬性可以用下標(biāo)小圓點(diǎn)標(biāo)記或者方括號(hào)標(biāo)記訪問(wèn)從開始,對(duì)象初始化

一、對(duì)象初始化 創(chuàng)建對(duì)象的兩種方法:

1.對(duì)象初始化器或?qū)ο笞置媪浚簕[nameValuePair1[, nameValuePair2[, ...nameValuePairN]]]}

參數(shù):nameValuePair1, nameValuePair2, ... nameValuePairN

? ? ?成對(duì)的名稱(字符串)與值(任何值),其中名稱通過(guò)冒號(hào)與值分隔

es2015之后簡(jiǎn)化了字面量寫法

    let a = "foo", b = 42, c = {};
    let object1 = {
        a: a,
        b: b,
        c: c
    };
    //es2015寫法
    let object2 = {
        a, b, c
    };
    console.log(object1.a === object2.a); //true

2.以構(gòu)造函數(shù)形式來(lái)調(diào)用:new Object([value])
參數(shù):value? 任何值

    let object = new Object({"foo": 123});
    console.log(object.foo); //123
訪問(wèn)對(duì)象屬性

對(duì)象屬性可以用下標(biāo)小圓點(diǎn)標(biāo)記或者方括號(hào)標(biāo)記訪問(wèn)

    let object = new Object({"b": 42});
    console.log(object["b"]); // 42
    object.b = "baz";
    console.log(object.b); //"baz"

從ECMAScript 2015開始,對(duì)象初始化語(yǔ)法開始支持計(jì)算屬性名,允許在[]中放入表達(dá)式,計(jì)算結(jié)果可以當(dāng)做屬性名

    let i = 0;
    let object1 = {
        ["foo" + ++i]: i,
        ["foo" + ++i]: i,
        ["foo" + ++i]: i
    };
    console.log(object1.foo1); // 1
    console.log(object1.foo2); // 2
    console.log(object1.foo3); // 3

    let param = "size";
    let object2 = {
        [param]: 12,
        ["mobile" + param.charAt(0).toUpperCase() + param.slice(1)]: 4
    };
    console.log(object2); // { size: 12, mobileSize: 4 }
二、Object靜態(tài)方法 1.Object.defineProperty() 方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并返回這個(gè)對(duì)象

語(yǔ)法:Object.defineProperty(obj, prop, descriptor)

參數(shù):

? ? ? ? obj? 要在其上定義屬性的對(duì)象
? ? ? ? prop? 要定義或修改的屬性的名稱
? ? ? ? descriptor? 將被定義或修改的屬性描述符
? ? ? ? ? ? configurable? t當(dāng)且僅當(dāng)該屬性的 configurable 為 true 時(shí),該屬性描述符才能夠被改變,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)象上被刪除。默認(rèn)為 false
? ? ? ? ? ? enumerable? 當(dāng)且僅當(dāng)該屬性的enumerable為true時(shí),該屬性才能夠出現(xiàn)在對(duì)象的枚舉屬性中。默認(rèn)為 false
? ? ? ? ? ? value? 與屬性關(guān)聯(lián)的值??梢允侨魏斡行У腏avaScript值(數(shù)字,對(duì)象,函數(shù)等)。默認(rèn)為 undefined.
? ? ? ? ? ? writable? 當(dāng)且僅當(dāng)該屬性的writable為true時(shí),value才能被賦值運(yùn)算符改變。默認(rèn)為 false
? ? ? ? ? ? get? 作為該屬性的 getter 函數(shù),如果沒(méi)有 getter 則為undefined。當(dāng)訪問(wèn)該屬性時(shí),該方法會(huì)被執(zhí)行,方法執(zhí)行時(shí)沒(méi)有參數(shù)傳入,但是會(huì)傳入this對(duì)象。默認(rèn)為 undefined

? ? ? ? ? ? set? 作為屬性的 setter 函數(shù),如果沒(méi)有 setter 則為undefined。當(dāng)屬性值修改時(shí),觸發(fā)執(zhí)行該方法,該方法將接受唯一參數(shù),即該屬性新的參數(shù)值。默認(rèn)為 undefined

返回值:傳遞給函數(shù)的對(duì)象

(1)writable決定一個(gè)屬性能否被賦值

    let object = {};
    Object.defineProperty(object,"a",{
        value: 30,
        writable: true
    });
    console.log(object.a); //30
    object.a = 15;
    console.log(object.a); //15
    Object.defineProperty(object,"b",{
        value: 30,
        writable: false
    });
    console.log(object.b); //30
    object.b = 15; //TypeError: Cannot assign to read only property "b" of object "#"

(2)enumerable決定該屬性是否能被枚舉

    let object = {};
    Object.defineProperty(object,"a",{
        value: 15,
        writable: true,
        enumerable: true
    });
    Object.defineProperty(object,"b",{
        value: 16,
        writable: true,
        enumerable: false
    });
    Object.defineProperty(object,"c",{
        value: 17,
        writable: true,
        enumerable: true
    });
    for (let i in object) {
        console.log(i+"=",object[i]); //a=15 c=17
    }
    console.log(Object.keys(object)); //["a", "c"]

    console.log(object.propertyIsEnumerable("a")); // true
    console.log(object.propertyIsEnumerable("b")); // false
    console.log(object.propertyIsEnumerable("c")); // true

(3)configurable

    let object = {};
    Object.defineProperty(object,"a",{
        get: () => {
            return 10;
        },
        configurable: false
    });
    Object.defineProperty(object,"a",{
        value: 15
    }); //TypeError: Cannot redefine property: a
    console.log(object.a); //10

    object.b = 5;
    //等同于
    Object.defineProperty(object,"b",{
        value: 5,
        writable: true,
        configurable: true,
        enumerable: true
    });
    Object.defineProperty(object,"d",{
        value: 5
    });
    //等同于
    Object.defineProperty(object,"b",{
        value: 5,
        writable: false,
        configurable: false,
        enumerable: false
    });

(4)set/get

    function Test() {
        let x = null;
        let arr = [];
        Object.defineProperty(this,"x",{
            get: () => {
                console.log("get");
                return x;
            },
            set: (value) => {
                console.log("set");
                x = value;
                arr.push(x);
            }
        });
        this.getTest = function () {
            return arr;
        }
    }
    let test = new Test();
    test.x; //get
    test.x = 25; //set
    test.x = 30; //set
    console.log(test.getTest()); //[25, 30]
2.Object.defineProperties() 方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象

語(yǔ)法:Object.defineProperties(obj, props)
參數(shù):
? ? ? ? obj? 要在其上定義屬性的對(duì)象
? ? ? ? props? 要定義其可枚舉屬性或修改的屬性描述符的對(duì)象
返回值:被傳遞給函數(shù)的對(duì)象

    let object = {};
    Object.defineProperties(object, {
        "property1": {
            value: true,
            writable: true
        },
        "property2": {
            value: "Hello",
            writable: false
        }
    });
3.Object.getOwnPropertyDescriptor() 方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符,自有屬性指的是直接賦予該對(duì)象的屬性,不需要從原型鏈上進(jìn)行查找的屬性

語(yǔ)法:Object.getOwnPropertyDescriptor(obj, prop)

參數(shù):
? ? ? ? obj? 需要查找的目標(biāo)對(duì)象
? ? ? ? prop? 目標(biāo)對(duì)象內(nèi)屬性名稱(String類型)
返回值:如果指定的屬性存在于對(duì)象上,則返回其屬性描述符對(duì)象(property descriptor),否則返回 undefined

    let object = {
        bar: 42,
        get foo() { return 17; }
    };
    let foo = Object.getOwnPropertyDescriptor(object, "foo");
    // {
    //   configurable: true,
    //   enumerable: true,
    //   get: /*the getter function*/,
    //   set: undefined
    // }
    let bar = Object.getOwnPropertyDescriptor(object, "bar");
    // {
    //   configurable: true,
    //   enumerable: true,
    //   value: 42,
    //   writable: true
    // }
    Object.defineProperty(object, "baz", {
        value: 8675309,
        writable: false,
        enumerable: false
    });
    let baz = Object.getOwnPropertyDescriptor(object, "baz");
    // {
    //   configurable: false,
    //   enumerable: false,
    //   value: 8675309,
    //   writable: false
    // }
4.Object.getOwnPropertyDescriptors() 方法用來(lái)獲取一個(gè)對(duì)象的所有自身屬性的描述符

語(yǔ)法:Object.getOwnPropertyDescriptors(obj)###

參數(shù):
? ? ? ? obj? 任意對(duì)象
返回值:所指定對(duì)象的所有自身屬性的描述符,如果沒(méi)有任何自身屬性,則返回空對(duì)象

    let object = {
        bar: 42,
        get foo() { return 17; }
    };
    Object.getOwnPropertyDescriptors(object);
    //{
    //  bar: {value: 42, writable: true, enumerable: true, configurable: true},
    //  foo: {get: ?, set: undefined, enumerable: true, configurable: true}
    // }
    function SuperClass() {}
    SuperClass.prototype = {
        x: 15,
        y: 20
    };
    let superClass = new SuperClass();
    superClass.a = 50;
    superClass.b = 100;
    function SubClass() {}
    SubClass.prototype = Object.create(SuperClass.prototype, Object.getOwnPropertyDescriptors(superClass));
    let subClass = new SubClass();
    console.log(subClass.a); //50
5.Object.getOwnPropertyNames()方法返回一個(gè)由指定對(duì)象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數(shù)組

語(yǔ)法:Object.getOwnPropertyNames(obj)

參數(shù):
? ? ? ? obj? 一個(gè)對(duì)象,其自身的可枚舉和不可枚舉屬性的名稱被返回
返回值:在給定對(duì)象上找到的屬性對(duì)應(yīng)的字符串?dāng)?shù)組

    let arr = ["a", "b", "c"];
    console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]
    // 類數(shù)組對(duì)象
    let object = { 0: "a", 1: "b", 2: "c"};
    console.log(Object.getOwnPropertyNames(object).sort()); // ["0", "1", "2"]
6.Object.getOwnPropertySymbols() 方法返回一個(gè)給定對(duì)象自身的所有 Symbol 屬性的數(shù)組

語(yǔ)法:Object.getOwnPropertySymbols(obj)

參數(shù):
? ? ? ? obj? 要返回 Symbol 屬性的對(duì)象
返回值:在給定對(duì)象自身上找到的所有 Symbol 屬性的數(shù)組

    let object = {};
    let a = Symbol("a");
    let b = Symbol.for("b");

    object[a] = "localSymbol";
    object[b] = "globalSymbol";
    let objectSymbols = Object.getOwnPropertySymbols(object);

    console.log(objectSymbols.length); // 2
    console.log(objectSymbols);         // [Symbol(a), Symbol(b)]
    console.log(objectSymbols[0]);      // Symbol(a)
7.Object.create()方法創(chuàng)建一個(gè)新對(duì)象,使用現(xiàn)有的對(duì)象來(lái)提供新創(chuàng)建的對(duì)象的__proto__

語(yǔ)法:Object.create(proto, [propertiesObject])

參數(shù):
? ? ?proto? 新創(chuàng)建對(duì)象的原型對(duì)象
? ? ?propertiesObject? 可選,這些屬性對(duì)應(yīng)Object.defineProperties()的第二個(gè)參數(shù)。
返回值:一個(gè)新對(duì)象,帶著指定的原型對(duì)象和屬性

    function Father() {
        this.x = 0;
        this.y = 0;
    }
    Father.prototype.move = function (x,y) {
        this.x += x;
        this.y += y;
    };
    function Son() {
        Father.call(this); //調(diào)用父類構(gòu)造函數(shù)
    }
    Son.prototype = Object.create(Father.prototype);
    Son.prototype.constructor = Son;
    let son = new Son();
    console.log(son instanceof Son); //true
    console.log(son instanceof Father); //true
8.Object.getPrototypeOf() 方法返回指定對(duì)象的原型

語(yǔ)法:Object.getPrototypeOf(object)
? ? ? ? obj? 要返回其原型的對(duì)象
返回值:給定對(duì)象的原型,如果沒(méi)有繼承屬性,則返回 null

    let proto = {};
    let object = Object.create(proto);
    Object.getPrototypeOf(object) === proto; // true

    let reg = /a/;
    Object.getPrototypeOf(reg) === RegExp.prototype; // true
9.Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象

語(yǔ)法:Object.assign(target, ...sources)

參數(shù):
? ? ?target? 目標(biāo)對(duì)象
? ? ?sources? 源對(duì)象
返回值:目標(biāo)對(duì)象

    let obj = { a: 1 };
    let copy = Object.assign({}, obj);
    console.log(copy); // { a: 1 }

此方法是淺拷貝,Object.assign()拷貝的是屬性值,如果源對(duì)象的屬性值是一個(gè)指向?qū)ο蟮囊?,它也只拷貝那個(gè)引用值

    let obj1 = { a: 0 , b: { c: 0}};
    let obj2 = Object.assign({}, obj1);
    console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
    obj1.b.c = 3;
    console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
    console.log(JSON.stringify(obj2)); // { a: 1, b: { c: 3}}

如何實(shí)現(xiàn)深拷貝

    let obj1 = { a: 0 , b: { c: 0}};
    let obj2 = JSON.parse(JSON.stringify(obj1));
    obj1.b.c = 4;
    console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}

合并兩個(gè)對(duì)象

    let obj1 = { a: 1, b: 1, c: 1 };
    let obj2 = { b: 2, c: 2 };
    let obj3 = { c: 3 };
    let newObj = Object.assign({}, obj1, obj2, obj3);
    console.log(newObj); // { a: 1, b: 2, c: 3 }
10.Object.is()方法判斷兩個(gè)值是否是相同的值

語(yǔ)法:Object.is(value1, value2);

參數(shù):
? ? ? ? value1? 需要比較的第一個(gè)值
? ? ? ? value2? 需要比較的第二個(gè)值
返回值:表示兩個(gè)參數(shù)是否相同的Boolean

以下情況返回true:

兩個(gè)值都是 undefined

兩個(gè)值都是 null

兩個(gè)值都是 true 或者都是 false

兩個(gè)值是由相同個(gè)數(shù)的字符按照相同的順序組成的字符串

兩個(gè)值指向同一個(gè)對(duì)象

兩個(gè)值都是數(shù)字并且

都是正零 +0

都是負(fù)零 -0

都是 NaN

都是除零和 NaN 外的其它同一個(gè)數(shù)字

    console.log(NaN === NaN); //false
    console.log(NaN == NaN); //false
    console.log(Object.is(NaN,NaN)); //true

    console.log(0 == false); //true
    console.log(0 === false); //false
    console.log(Object.is(0,false)); //false

    console.log(-0 == 0); //true
    console.log(-0 === 0); //true
    console.log(Object.is(-0,0)); //false
11.Object.isExtensible() 方法判斷一個(gè)對(duì)象是否是可擴(kuò)展的(是否可以在它上面添加新的屬性)

語(yǔ)法: Object.isExtensible(obj)

參數(shù):
? ? ?obj? 需要檢測(cè)的對(duì)象
返回值:表示給定對(duì)象是否可擴(kuò)展的一個(gè)Boolean

12.Object.isSealed() 方法判斷一個(gè)對(duì)象是否被密封

語(yǔ)法:Object.isSealed(obj)

參數(shù):
? ? ? ? obj? 要被檢查的對(duì)象
返回值:表示給定對(duì)象是否被密封的一個(gè)Boolean

13.Object.isFrozen()方法判斷一個(gè)對(duì)象是否被凍結(jié)

語(yǔ)法:Object.isFrozen(obj)

參數(shù):
? ? ? ? obj? 被檢測(cè)的對(duì)象
返回值:表示給定對(duì)象是否被凍結(jié)的Boolean

14.Object.preventExtensions()方法讓一個(gè)對(duì)象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的屬性

語(yǔ)法:Object.preventExtensions(obj)

參數(shù):
? ? ? ? obj? 將要變得不可擴(kuò)展的對(duì)象
返回值:已經(jīng)不可擴(kuò)展的對(duì)象
描述:不可擴(kuò)展對(duì)象不能再添加新的屬性,但是原有的屬性仍然可被編輯、刪除

非空對(duì)象(其屬性的configurable為true,writable為true):

    let object = {
        a:1,
        b:2
    };
    console.log(Object.isExtensible(object)); // true
    Object.preventExtensions(object);
    console.log(Object.isExtensible(object)); //false
    console.log(Object.isSealed(object)); // false
    console.log(Object.isFrozen(object)); // false
    ob.b = 20; //可以賦值
    console.log(ob.b); //20
    delete ob.b; //可以刪除
    console.log(ob); //{a: 1}
    Object.defineProperty(ob,"c",{ // 不可以添加屬性
        value: 3,
        writable: true
    }); //Cannot define property c, object is not extensible

非空對(duì)象(其屬性的configurable為false,writable為true):

    let empty = {};
    Object.defineProperty(empty,"foo",{
        value: "baz",
        writable: true
    });
    Object.preventExtensions(empty);
    console.log(Object.isExtensible(empty)); // false
    console.log(Object.isSealed(empty)); // true
    console.log(Object.isFrozen(empty)); // false

非空對(duì)象(其屬性的configurable為true,writable為false):

    let empty = {};
    Object.defineProperty(empty,"foo",{
        value: "baz",
        writable: false,
        configurable: true
    });
    Object.preventExtensions(empty);
    console.log(Object.isExtensible(empty)); // false
    console.log(Object.isSealed(empty)); // false
    console.log(Object.isFrozen(empty)); // false

非空對(duì)象(其屬性的configurable為false,writable為false):

    let empty = {};
    Object.defineProperty(empty,"foo",{
        value: "baz"
    });
    Object.preventExtensions(empty);
    console.log(Object.isExtensible(empty)); // false
    console.log(Object.isSealed(empty)); // true
    console.log(Object.isFrozen(empty)); // true

空對(duì)象:

    let empty1 = {};
    console.log(Object.isExtensible(empty1)); // true
    Object.preventExtensions(empty1);
    console.log(Object.isExtensible(empty1)); //false
    console.log(Object.isSealed(empty1)); // true
    console.log(Object.isFrozen(empty1)); // true
15.Object.seal()方法封閉一個(gè)對(duì)象,阻止添加新屬性并將所有現(xiàn)有屬性標(biāo)記為不可配置。當(dāng)前屬性的值只要可寫就可以改變

語(yǔ)法:Object.seal(obj)

參數(shù):
? ? ? ? obj? 將要被密封的對(duì)象
返回值:被密封的對(duì)象
描述:密封一個(gè)對(duì)象會(huì)讓這個(gè)對(duì)象變的不能添加新屬性,且所有已有屬性會(huì)變的不可配置

空對(duì)象:

    let empty = {};
    Object.seal(empt);
    console.log(Object.isExtensible(empty)); // false
    console.log(Object.isSealed(empty)); // true
    console.log(Object.isFrozen(empty)); // true

非空對(duì)象:

    let object = {
        foo: "bar"
    };
    Object.seal(object);
    object.foo = "baz"; //可編輯
    console.log(object.foo); //baz
    delete object.foo; //TypeError: Cannot delete property "foo" of #
    console.log(Object.isExtensible(object)); // false
    console.log(Object.isSealed(object)); // true
    console.log(Object.isFrozen(object)); // false
16.Object.freeze() 方法可以凍結(jié)一個(gè)對(duì)象,凍結(jié)指的是不能向這個(gè)對(duì)象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對(duì)象已有屬性的可枚舉性、可配置性、可寫性。也就是說(shuō),這個(gè)對(duì)象永遠(yuǎn)是不可變的

語(yǔ)法:Object.freeze(obj)

參數(shù):
? ? ?obj? 要被凍結(jié)的對(duì)象
返回值:被凍結(jié)的對(duì)象
描述:被凍結(jié)對(duì)象自身的所有屬性都不可能以任何方式被修改,如果一個(gè)屬性的值是個(gè)對(duì)象,則這個(gè)對(duì)象中的屬性是可以修改的,除非它也是個(gè)凍結(jié)對(duì)象

    let object1 = {
        property1: 42
    };
    Object.freeze(object1);
    console.log(Object.isExtensible(object1)); // false
    console.log(Object.isSealed(object1)); // true
    console.log(Object.isFrozen(object1)); // true
    object1.property1 = 33; // TypeError: Cannot assign to read only property "property1" of object "#"
    console.log(object1.property1); //42

    let object2 = {
        internal: {}
    };
    Object.freeze(object2);
    object2.internal.a = "aValue";
    console.log(object2.internal.a); //aValue
17.Object.entries()方法返回一個(gè)給定對(duì)象自身可枚舉屬性的鍵值對(duì)數(shù)組,其排列與使用 for...in 循環(huán)遍歷該對(duì)象時(shí)返回的順序一致

語(yǔ)法:Object.entries(obj)

參數(shù):
? ? ?obj? 可以返回其可枚舉屬性的鍵值對(duì)的對(duì)象
返回值:給定對(duì)象自身可枚舉屬性的鍵值對(duì)數(shù)組

    const object1 = { foo: "bar", baz: 42 };
    console.log(Object.entries(object1)); // [ ["foo", "bar"], ["baz", 42] ]
    // array like object
    const object2 = { 0: "a", 1: "b", 2: "c" };
    console.log(Object.entries(object2)); // [ ["0", "a"], ["1", "b"], ["2", "c"] ]
    // array like object with random key ordering
    const object3 = { 100: "a", 2: "b", 7: "c" };
    console.log(Object.entries(object3)); // [ ["2", "b"], ["7", "c"], ["100", "a"] ]
18.Object.keys() 方法會(huì)返回一個(gè)由一個(gè)給定對(duì)象的自身可枚舉屬性組成的數(shù)組,數(shù)組中屬性名的排列順序和使用 for...in 循環(huán)遍歷該對(duì)象時(shí)返回的順序一致

語(yǔ)法:Object.keys(obj)

參數(shù):
? ? ? ? obj? 要返回其枚舉自身屬性的對(duì)象
返回值:一個(gè)表示給定對(duì)象的所有可枚舉屬性的字符串?dāng)?shù)組

    let arr = ["a", "b", "c"];
    console.log(Object.keys(arr)); // ["0", "1", "2"]

    // array like object
    let object = { 0: "a", 1: "b", 2: "c" };
    console.log(Object.keys(object)); // ["0", "1", "2"]
19.Object.values()方法返回一個(gè)給定對(duì)象自己的所有可枚舉屬性值的數(shù)組,值的順序與使用for...in循環(huán)的順序相同

語(yǔ)法:Object.values(obj)

參數(shù):
? ? ? ? obj? 被返回可枚舉屬性值的對(duì)象
返回值:一個(gè)包含對(duì)象自身的所有可枚舉屬性值的數(shù)組

    let arr = ["a", "b", "c"];
    console.log(Object.values(arr)); // ["a", "b", "c"]

    // array like object
    let object = { 0: "a", 1: "b", 2: "c" };
    console.log(Object.values(object)); // ["a", "b", "c"]
三、Object實(shí)例方法 1.hasOwnProperty() 方法會(huì)返回一個(gè)布爾值,指示對(duì)象自身屬性中是否具有指定的屬性

語(yǔ)法:obj.hasOwnProperty(prop)

參數(shù):

? ? ? ? prop? 要檢測(cè)的屬性? 字符串 名稱或者 Symbol
返回值:用來(lái)判斷某個(gè)對(duì)象是否含有指定的屬性的 Boolean

描述:這個(gè)方法可以用來(lái)檢測(cè)一個(gè)對(duì)象是否含有特定的自身屬性;和 in 運(yùn)算符不同,該方法會(huì)忽略掉那些從原型鏈上繼承到的屬性

    let object = new Object();
    object.prop = "exists";
    console.log(object.hasOwnProperty("prop"));             // true
    console.log(object.hasOwnProperty("toString"));         // false
    console.log(object.hasOwnProperty("hasOwnProperty"));   // false
    console.log("toString" in object); // true
    console.log("prop" in object); // true
    console.log("hasOwnProperty" in object); // true
2.isPrototypeOf() 方法用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上

語(yǔ)法:prototypeObj.isPrototypeOf(object)

參數(shù):

? ? ? ? object? 在該對(duì)象的原型鏈上搜尋

返回值:Boolean,表示調(diào)用對(duì)象是否在另一個(gè)對(duì)象的原型鏈上

function Foo() {}
function Bar() {}
function Baz() {}

Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);

let baz = new Baz();

console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true
3.propertyIsEnumerable() 方法返回一個(gè)布爾值,表示指定的屬性是否可枚舉

語(yǔ)法:obj.propertyIsEnumerable(prop)

參數(shù):

? ? ? ? prop? 需要測(cè)試的屬性名

返回值:用來(lái)表示指定的屬性名是否可枚舉的Boolean

let o = {};
let a = [];
o.prop = "is enumerable";
a[0] = "is enumerable";

o.propertyIsEnumerable("prop");   //  返回 true
a.propertyIsEnumerable(0);        // 返回 true
4.toString() 方法返回一個(gè)表示該對(duì)象的字符串

語(yǔ)法:object.toString()

返回值:表示該對(duì)象的字符串

    let object = new Object();
    console.log(object.toString()); //[object Object]
    function Animal(name,age,color,sex) {
        this.name = name;
        this.age = age;
        this.color = color;
        this.sex = sex;
    }
    Animal.prototype.toString = function () {
        let string = this.name + "是一個(gè)" + this.age + "歲的" + this.color + "的" + this.sex + "動(dòng)物";
        return string;
    };
    let animal = new Animal("小可愛(ài)",1,"灰色","雌性");
    console.log(animal.toString()); //小可愛(ài)是一個(gè)1歲的灰色的雌性動(dòng)物
5.valueOf() 方法返回指定對(duì)象的原始值

語(yǔ)法:object.valueOf()
返回值:返回值為該對(duì)象的原始值

    function Animal(name,age,color,sex) {
        this.name = name;
        this.age = age;
        this.color = color;
        this.sex = sex;
    }
    let animal = new Animal("小可愛(ài)",1,"灰色","雌性");
    console.log(animal.valueOf()); //{name: "小可愛(ài)", age: 1, color: "灰色", sex: "雌性"}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97484.html

相關(guān)文章

  • JavaScript 深入了解基本類型引用類型的值

    摘要:原文鏈接一個(gè)變量可以存放兩種類型的值,基本類型的值和引用類型的值。引入了一種新的原始數(shù)據(jù)類型,表示獨(dú)一無(wú)二的值。 原文鏈接 一個(gè)變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。 ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨(dú)一無(wú)二的值。它是 JavaScript 語(yǔ)言的第七種數(shù)據(jù)類型,前六種是:Un...

    Mr_houzi 評(píng)論0 收藏0
  • JavaScript-如何實(shí)現(xiàn)克隆(clone)函數(shù)

    摘要:前提知識(shí)在實(shí)現(xiàn)克隆函數(shù)之前你需要明白以下一些概念如果你已經(jīng)明白了請(qǐng)直接閱讀實(shí)現(xiàn)部分什么是值類型引用類型很多新手可能會(huì)對(duì)值類型引用類型原始類型基本類型等等名稱感到困惑這里就解釋一下這些概念一個(gè)事物是可以有多種區(qū)分形式的比如貓我們可以說(shuō)它是貓科 前提知識(shí) 在實(shí)現(xiàn)克隆函數(shù)之前,你需要明白以下一些概念,如果你已經(jīng)明白了,請(qǐng)直接閱讀 實(shí)現(xiàn) 部分. 什么是值類型、引用類型? 很多新手可能會(huì)對(duì) 值類...

    JasonZhang 評(píng)論0 收藏0
  • 深入了解JavaScript對(duì)象(1)--原始類型引用類型

    摘要:原始類型和引用類型原始類型存儲(chǔ)簡(jiǎn)單數(shù)據(jù)值,引用類型存儲(chǔ)對(duì)象,其本質(zhì)是指向內(nèi)存位置的應(yīng)用。保存指向內(nèi)存中實(shí)際對(duì)象所在位置的指針鑒別引用類型操作符以一個(gè)對(duì)象和一個(gè)構(gòu)造函數(shù)為參數(shù)。這些特殊引用類型的存在使得原始引用類型用起來(lái)和對(duì)象一樣方便。 原始類型和引用類型 1.原始類型存儲(chǔ)簡(jiǎn)單數(shù)據(jù)值,引用類型存儲(chǔ)對(duì)象,其本質(zhì)是指向內(nèi)存位置的應(yīng)用。 注:其他編程語(yǔ)言用棧存儲(chǔ)原始類型,用堆存儲(chǔ)引用類型。Ja...

    mindwind 評(píng)論0 收藏0
  • JavaScript的數(shù)據(jù)類型及其檢測(cè)

    摘要:值的比較只進(jìn)行值的比較會(huì)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。只要在當(dāng)前實(shí)例的原型鏈上,我們用其檢測(cè)出來(lái)的結(jié)果都是。但檢測(cè)與不一樣,還可以處理基本數(shù)據(jù)類型的檢測(cè)。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。其中...

    starsfun 評(píng)論0 收藏0
  • JavaScript的數(shù)據(jù)類型及其檢測(cè)

    摘要:值的比較只進(jìn)行值的比較會(huì)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。只要在當(dāng)前實(shí)例的原型鏈上,我們用其檢測(cè)出來(lái)的結(jié)果都是。但檢測(cè)與不一樣,還可以處理基本數(shù)據(jù)類型的檢測(cè)。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。其中...

    dingding199389 評(píng)論0 收藏0
  • JavaScript的數(shù)據(jù)類型及其檢測(cè)

    摘要:值的比較只進(jìn)行值的比較會(huì)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。只要在當(dāng)前實(shí)例的原型鏈上,我們用其檢測(cè)出來(lái)的結(jié)果都是。但檢測(cè)與不一樣,還可以處理基本數(shù)據(jù)類型的檢測(cè)。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。其中...

    Moxmi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<