淺析JavaScript中Object的方法

最近在看JavaScript原型時經常會遇到Object的一些方法和屬性,特地去查看了相關資料,并將使用方法整理下來供參考。

及時總結

在瀏覽器控制臺輸入Object.就會出現如下圖所示的一些方法和屬性,其中也包含ES6新加入的屬性和方法,從中挑選一些常用的屬性和方法介紹。

chrome瀏覽器下

1 . ** creat** 創建一個擁有指定原型和若干個指定屬性的對象。

Object.create(proto, [ propertiesObject ])

proto 一個對象,作為新創建對象的原型。
propertiesObject 可選。該參數對象是一組屬性與值,存放新創建對象的屬性和值

var animal = {age:0};
var cat = Object.create(animal, {
    name: {
        value: 'tom', // cat的屬性name的值
        writable: true, //當且僅當writable 為 true 時,cat的name屬性才能被賦值運算符改變,默認為 false
        configurable: true, // 當且僅當該屬性的 configurable 為 true 時,該屬性描述符才能夠被改變,也能夠被刪除,默認為 false
        enumerable: true // 當且僅當該屬性的 enumerable 為 true 時,該屬性才能夠出現在對象的枚舉屬性中,默認為 false
        }
});
console.log(cat.name); // tom
console.log(cat.age); // 0

在創建cat對象時以animal作為原型,name是cat的一個屬性

2 . defineProperty 直接在一個對象上定義一個新屬性,或者修改一個已經存在的屬性, 并返回這個對象。

Object.defineProperty(obj, prop, descriptor)

obj : 需要定義屬性的對象。
prop : 需定義或修改的屬性的名字。
descriptor : 將被定義或修改的屬性的描述符。

var cat = {age:10};
console.log(cat.age); // 10
Object.defineProperty(cat, 'age', {  
    enumerable: false,
    configurable: false, 
    writable: false,
    value: 4
});
console.log(cat.age); // 4

可以看出將cat的age屬性值由10修改為4

3 . defineProperties 在一個對象上添加或修改一個或者多個自有屬性,并返回該對象。

var cat = {age: 10, name: 'tom'};
console.log(cat.age);
console.log(cat.name);
Object.defineProperties(cat, { 
    age: {    
        enumerable: false,
        configurable: false, 
        writable: false, 
        value: 4   
    },    
    name: {  
        enumerable: false,  
        configurable: false,    
        writable: false,  
        value: 'jack' 
    }
});
console.log(cat.age);
console.log(cat.name);

4 . getPrototypeOf 返回指定對象的原型(也就是該對象內部屬性[[Prototype]]的值)。

Object.getPrototypeOf(object)

*object : 返回該對象的原型。 *

var cat = {age: 10, name: 'tom'};
var obj = Object.create(cat);
console.log(Object.getPrototypeOf(obj)); // { age: 10, name: 'tom' }

5 . getOwnPropertyDescriptor 返回指定對象上一個自有屬性對應的屬性描述符。(自有屬性指的是直接賦予該對象的屬性,不需要從原型鏈上進行查找的屬性)

Object.getOwnPropertyDescriptor(obj, prop)

obj 在該對象上查看屬性
prop 一個屬性名稱,該屬性的屬性描述符將被返回

var cat = {age: 10, name: 'tom'};
var result = Object.getOwnPropertyDescriptor(cat,'age');
console.log(result);
/* { 
  value: 10,
  writable: true,
  enumerable: true,
  configurable: true
 }
*/

6 . keys 方法會返回一個由給定對象的所有可枚舉自身屬性的屬性名組成的數組

Object.keys(obj)

obj : 返回該對象的所有可枚舉自身屬性的屬性名.

var cat = {age: 10, name: 'tom'};
var result = Object.keys(cat);
console.log(result); // [ 'age', 'name' ]

7 . preventExtensions 方法讓一個對象變的不可擴展,也就是永遠不能再添加新的自身屬性。

Object.preventExtensions(obj)

obj : 將要變得不可擴展的對象

var cat = {age: 10, name: 'tom'};
Object.preventExtensions(cat);
cat.sex='female';
console.log(cat); // { age: 10, name: 'tom' }

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

Object.isExtensible(obj)

obj : 需要檢測的對象

var person = {name: 'douqing'};
var cat = {age: 10, name: 'tom'};
Object.preventExtensions(cat);
cat.sex='female';
console.log(cat); //  { age: 10, name: 'tom' }
console.log(Object.isExtensible(cat)); // false
console.log(Object.isExtensible(person)); // true

9 . assign 方法可以把任意多個的源對象自身的可枚舉屬性拷貝給目標對象,然后返回目標對象。

Object.assign(target, ...sources)

target : 目標對象。
sources : 任意多個源對象。

var cat = {age: 10, name: 'tom'};
var result = Object.assign({}, cat);
console.log(result); // { age: 10, name: 'tom' }

10 . is 方法用來判斷兩個值是否是同一個值。

Object.is(value1, value2)

value1 需要比較的第一個值。
value2 需要比較的第二個值。

var cat = {age: 10, name: 'tom'};
var person = {name: 'douqing'};
console.log(Object.is(1, 1)); // true
console.log(Object.is(person, cat)); // false

更多詳細比較>>

上面只是一些Object中常用的屬性方法,想要了解更多的可以點擊這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.屬性的簡潔表示法 允許直接寫入變量和函數 上面代碼表明,ES6 允許在對象之中,直接寫變量。這時,屬性名為變量...
    雨飛飛雨閱讀 1,146評論 0 3
  • 此文章用于歸納Object的所有方法 在JavaScript中,object是所有對象的基礎(原型鏈的頂端),所以...
    moonburn閱讀 660評論 0 5
  • 屬性的簡潔表示法 ES6允許直接寫入變量和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。 上面代碼表明,ES6允...
    呼呼哥閱讀 2,940評論 0 2
  • 最近幾天忙而亂,事瑣而多,無論是聽到的事,見過的人,還是很有啟發的,將隨想記錄如下,且給自己做個提醒。 1.一個人...
    莫莫queen閱讀 113評論 1 3
  • 前言 Redis作為cache服務器,支持多種數據結構,String、List、Hash、Set、Zset。多種數...
    小小小碼農閱讀 6,068評論 0 1