国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript:對Object對象的一些常用操作總結(jié)

馬龍駒 / 1970人閱讀

摘要:一可以用作對象的復(fù)制可以用作對象的合并注意目標(biāo)對象自身也會改變。對象四返回一個(gè)數(shù)組,包括對象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。該方法返回被凍結(jié)的對象。方法判斷一個(gè)對象是否被凍結(jié)。

JavaScript對Object對象的一些常用操作總結(jié)。

一、Object.assign()

1.可以用作對象的復(fù)制

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

2.可以用作對象的合并

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 } 注意目標(biāo)對象自身也會改變。

3.目標(biāo)對象o1自身也發(fā)生了改變,假如不想讓o1改變,可以把三個(gè)對象合并到一個(gè)空的對象中,操作如下:

 var obj = Object.assign({},o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1 }

注意:以下幾個(gè)地方
1.繼承屬性和不可枚舉屬性是不能拷貝的

var obj = Object.create({foo: 1}, { // foo 是個(gè)繼承屬性
    bar: {
        value: 2  // bar 是個(gè)不可枚舉屬性。
    },
    baz: {
        value: 3,
        enumerable: true  // baz 是個(gè)自身可枚舉屬性
    }
});

var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }

2.原始類型會被包裝為 object

var v1 = "abc";
var v2 = true;
var v3 = 10;
var v4 = Symbol("foo")

var obj = Object.assign({}, v1, null, v2, undefined, v3, v4); 
// 原始類型會被包裝,null 和 undefined 會被忽略
// 注意,只有字符串的包裝對象才可能有自身可枚舉屬性
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
二、Object.create()

Object.create()的不止是有一個(gè)參數(shù),其實(shí)還有第二個(gè)參數(shù)!
Object.create(proto, [ propertiesObject ])第二個(gè)參數(shù)是可選的,主要用于指定我們創(chuàng)建的對象的一些屬性,(例如:是否可讀、是否可寫,是否可以枚舉等等)可以通過下面案例來了解第二個(gè)參數(shù)!

var o;
o = Object.create(Object.prototype, {
  // foo會成為所創(chuàng)建對象的數(shù)據(jù)屬性
  foo: { writable:true, configurable:true, value: "hello" },
  // bar會成為所創(chuàng)建對象的訪問器屬性
  bar: {
    configurable: false,
    get: function() { return 10 },
    set: function(value) { console.log("Setting `o.bar` to", value) }
}})

// 創(chuàng)建一個(gè)以另一個(gè)空對象為原型,且擁有一個(gè)屬性p的對象
o = Object.create({}, { p: { value: 42 } })

// 省略了的屬性特性默認(rèn)為false,所以屬性p是不可寫,不可枚舉,不可配置的
o.p = 24
o.p
//42

o.q = 12
for (var prop in o) {
   console.log(prop)
}
//"q"

delete o.p
//false

//創(chuàng)建一個(gè)可寫的,可枚舉的,可配置的屬性p
o2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });
三、Object.is()

用來判斷兩個(gè)值是否是同一個(gè)值。

下面是一些例子,面試中可能會提及

Object.is("haorooms", "haorooms");     // true
Object.is(window, window);   // true

Object.is("foo", "bar");     // false
Object.is([], []);           // false

var test = { a: 1 };
Object.is(test, test);       // true

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true
Object.keys(obj)

返回一個(gè)由一個(gè)給定對象的自身可枚舉屬性組成的數(shù)組,數(shù)組中屬性名的排列順序和使用 for...in 循環(huán)遍歷該對象時(shí)返回的順序一致 (兩者的主要區(qū)別是 一個(gè) for-in 循環(huán)還會枚舉其原型鏈上的屬性)。

let arr = ["a", "b", "c"];
console.log(Object.keys(arr));
// ["0", "1", "2"]
 
/* Object 對象 */
let obj = { foo: "bar", baz: 42 },
keys = Object.keys(obj);
console.log(keys);
// ["foo","baz"]  
四、Object.keys()

Object.keys返回一個(gè)數(shù)組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含 Symbol 屬性)的鍵名。

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

// array like object
var obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.keys(obj)); // console: ["0", "1", "2"]

// array like object with random key ordering
var anObj = { 100: "a", 2: "b", 7: "c" };
console.log(Object.keys(anObj)); // console: ["2", "7", "100"]

// getFoo is a property which isn"t enumerable
var myObj = Object.create({}, {
  getFoo: {
    value: function () { return this.foo; }
  } 
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ["foo"]

方法返回一個(gè)給定對象自己的所有可枚舉屬性值的數(shù)組,值的順序與使用for...in循環(huán)的順序相同 ( 區(qū)別在于 for-in 循環(huán)枚舉原型鏈中的屬性 )。 Object.values會過濾屬性名為 Symbol 值的屬性。

var an_obj = { 100: "a", 2: "b", 7: "c" };
console.log(Object.values(an_obj)); // ["b", "c", "a"]
 
var obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.values(obj)); // ["a", "b", "c"]

五、Object.entries()

返回一個(gè)給定對象自身可枚舉屬性的鍵值對數(shù)組,其排列與使用 for...in 循環(huán)遍歷該對象時(shí)返回的順序一致(區(qū)別在于 for-in 循環(huán)也枚舉原型鏈中的屬性)。

const obj = { foo: "bar", baz: 42 };
console.log(Object.entries(obj)); // [ ["foo", "bar"], ["baz", 42] ]     
const simuArray = { 0: "a", 1: "b", 2: "c" };
console.log(Object.entries(simuArray)); // [ ["0", "a"], ["1", "b"], ["2", "c"] ]
六、常用其他操作

1.刪除對象中的某個(gè)值,前面案例中也謝了可以直接用delete

var obj = {b:123};
delete o.p // 或delete  obj[b];

2.遍歷對象
2.1for-in遍歷

var obj = {a: "ss", b: "bb", c: "cc"};
for (var i in obj){
    console.log(i+":"+obj[i]);
}

2.2forEach遍歷,先通過Object.keys()返回一個(gè)數(shù)組

Object.keys(obj).forEach((value, index)=>{
    console.log(value, index,obj[value]);
});
//等同于
Object.keys(obj).forEach(function (value, index,c) {
    console.log(value, index,obj[value]);
});

2.3jQuery的$.each()方法:它接受兩個(gè)參數(shù),分別指代屬性名和屬性值

$.each(obj,function(key,value){
    console.log(key+": "+value)

其它一些不常用的對象操作屬性:

1.Object.freeze() 方法可以凍結(jié)一個(gè)對象,凍結(jié)指的是不能向這個(gè)對象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性、可配置性、可寫性。也就是說,這個(gè)對象永遠(yuǎn)是不可變的。該方法返回被凍結(jié)的對象。

2.Object.isFrozen() 方法判斷一個(gè)對象是否被凍結(jié)(frozen)。

3.Object.isExtensible() 方法判斷一個(gè)對象是否是可擴(kuò)展的(是否可以在它上面添加新的屬性)。

4.Object.isSealed() 方法判斷一個(gè)對象是否是密封的(sealed)。

5.Object.seal() 方法可以讓一個(gè)對象密封,并返回被密封后的對象。密封對象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性,但可能可以修改已有屬性的值的對象。

6.Object.getOwnPropertyNames(obj)返回一個(gè)數(shù)組,包含對象自身的所有屬性(不含 Symbol 屬性,但是包括不可枚舉屬性)的鍵名。

7.Object.getOwnPropertySymbols(obj)返回一個(gè)數(shù)組,包含對象自身的所有 Symbol 屬性的鍵名。

8.Reflect.ownKeys(obj)返回一個(gè)數(shù)組,包含對象自身的所有鍵名,不管鍵名是 Symbol 或字符串,也不管是否可枚舉。

9.hasOwnProperty()判斷對象自身屬性中是否具有指定的屬性。

JavaScript字符串操作方法大全,包含ES6方法

JavaScript常用數(shù)組操作方法,包含ES6方法

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98993.html

相關(guān)文章

  • JavaScript」Array方法詳細(xì)總結(jié)常用數(shù)組操作(附完整示例)

    摘要:數(shù)組索引只是具有整數(shù)名稱的枚舉屬性,并且與通用對象屬性相同。利用的解構(gòu)賦值解構(gòu)賦值尾遞歸優(yōu)化遞歸非常耗內(nèi)存,因?yàn)樾枰瑫r(shí)保存成千上百個(gè)調(diào)用幀,很容易發(fā)生棧溢出。而尾遞歸的實(shí)現(xiàn),往往需要改寫遞歸函數(shù),確保最后一步只調(diào)用自身。 一.前言 因?yàn)樵诠ぷ鳟?dāng)中,經(jīng)常使用到j(luò)s的數(shù)組,而其中對數(shù)組方法的使用也是很頻繁的,所以總是會有弄混或者概念不夠清晰的狀況,所以,寫下這篇文章整理一番,本文有對幾乎...

    Alfred 評論0 收藏0
  • JavaScript面向象程序設(shè)計(jì)

    摘要:構(gòu)造函數(shù)模式這種方法創(chuàng)建自定義的構(gòu)造函數(shù),從而自定義對象類型的屬性和方法。借用構(gòu)造函數(shù)在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型構(gòu)造函數(shù),通過和方法來實(shí)現(xiàn)。 JavaScript中沒有類的概念,它不是嚴(yán)格意義上的面向?qū)ο笳Z言,而是基于對象(Object-based)的編程語言。下面是讀《JavaScript高級程序設(shè)計(jì)(第三版)》的學(xué)習(xí)筆記,總結(jié)一些常用的創(chuàng)建對象和繼承的方法。 一、創(chuàng)建對象 1...

    wfc_666 評論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評論0 收藏0
  • JavaScript-總結(jié)常用代碼書寫規(guī)范

    摘要:函數(shù)聲明應(yīng)該在作用域的頂層。數(shù)組和對象字面量用數(shù)組和對象字面量來代替數(shù)組和對象構(gòu)造器。數(shù)組構(gòu)造器很容易讓人在它的參數(shù)上犯錯(cuò)。推薦對象構(gòu)造器不會有類似的問題,但是為了可讀性和統(tǒng)一性,我們應(yīng)該使用對象字面量。 javascript 代碼規(guī)范 代碼規(guī)范我們應(yīng)該遵循古老的原則:能做并不意味著應(yīng)該做。 全局命名空間污染 總是將代碼包裹在一個(gè)立即的函數(shù)表達(dá)式里面,形成一個(gè)獨(dú)立的模塊。 不推薦 va...

    Berwin 評論0 收藏0
  • 一篇文章帶你理解原型和原型鏈

    摘要:上面的代碼,運(yùn)行以后,我們可以看到因?yàn)榈脑褪侵赶虻膶?shí)例上的,所以可以訪問他的屬性值,那如果我不想讓訪問的構(gòu)造函數(shù)里聲明的屬性值,那怎么辦呢只需要將指向的原型而不是實(shí)例就行了。 走在前端的大道上 本篇將自己讀過的相關(guān) javascript原型和原型鏈 文章中,對自己有啟發(fā)的章節(jié)片段總結(jié)在這(會對原文進(jìn)行刪改),會不斷豐富提煉總結(jié)更新。 文章——深入理解javascript之原型 一般的...

    yintaolaowanzi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<