JavaScript 參考:物件

關於 JavaScript 物件屬性和方法的一切 本篇文件記錄了所有 Object 內建物件的屬性和方法。 除了原始類型(字串、數字、布林值、符號、null 或 undefined)之外的任何值都是一個物件。即使是陣列或函式,在底層也都是物件。 可以使用物件字面語法來生成一個物件值: const person = {} typeof person // "object" 可以使用 Object 全局函式來生成物件值: const person = Object() typeof person // "object" 也可以使用 Object 建構函式來生成物件值: const person = new Object() typeof person // "object" 另一種語法是使用 Object.create(): const car = Object.create() 可以使用以下語法來初始化物件的屬性: const person = { age: 36, name: 'Flavio', speak: () => { // 說話 } } const person = Object({ age: 36, name: 'Flavio', speak: () => { // 說話 } }) const person = new Object({ age: 36, name: 'Flavio', speak: () => { // 說話 } }) 這些方式基本上是等價的,因為它們都可以讓您訪問我下面將列出的方法。...

JavaScript 屬性描述符

解釋了屬性描述符以及它們的用途 在 JavaScript 中,任何物件都有一組屬性,而每個屬性都有一個 描述符。 這個描述符是一個物件,它定義了屬性的行為和自身屬性。 許多 Object 靜態方法與之相互作用。這些方法包括: Object.create() Object.defineProperties() Object.defineProperty() Object.getOwnPropertyDescriptor() Object.getOwnPropertyDescriptors() 以下是一個屬性描述符物件的例子: { value: 'Something' } 這是最簡單的描述符物件。value 是屬性的值,在鍵值定義中使用。這個 key 是在物件中定義此屬性時所使用的鍵: { breed: { value: 'Siberian Husky' } } 示例: const animal = {} const dog = Object.create(animal, { breed: { value: 'Siberian Husky' } }); console.log(dog.breed) //'Siberian Husky' 您可以為每個不同的物件屬性傳遞其他屬性: value:屬性的值 writable:若為 true,則該屬性可以被更改 configurable:若為 false,則該屬性無法被移除,也無法更改任何屬性,除非它的值 enumerable:若為 true,則該屬性是可枚舉的 get:屬性的 getter 函式,在讀取屬性時呼叫 set:屬性的 setter 函式,在變更屬性值時呼叫 writable、configurable 和 enumerable 設定該屬性的行為。它們的值是布林值,默認情況下都是 false。...

JavaScript:如何獲取物件的類別名稱

如果你有一個由類別生成的物件,且你想要得到它的類別名稱,該怎麼做呢? 假設你有一個由類別生成的物件,你想要得到它的類別名稱。 舉個例子,可以參考下面的程式碼: class Dog { } const roger = new Dog() 當然,現在我們知道roger是一個由Dog類別創造出的物件。 但是,如果你不知道物件的類別,該如何取得它的類別名稱呢? 你可以查找物件的建構函式(constructor),然後參考它的name屬性。 以下是一個例子: class Dog { } const roger = new Dog() console.log(roger.constructor.name) // 'Dog' 這個方法會返回一個代表類別名稱的字串。 你也可以直接將constructor屬性與類別進行比較,像這樣: class Dog { } const roger = new Dog() roger.constructor === Dog //true 這個方法同樣會返回true,表示物件的建構函式與類別一致。

JavaScript類型轉換(型別轉換)

了解 JavaScript 類型轉換的基礎知識 即使 JavaScript 是一種弱類型語言,您可能需要將值從一種類型轉換為另一種類型。 在 JavaScript 中,我們有以下原始類型: Number String Boolean Symbol 以及對象類型: Object (還有 null 和 undefined,但從它們轉換到其他類型沒有意義) 例如,您可能想要進行以下轉換: 將數字轉換為字符串 將字符串轉換為數字 將字符串轉換為布爾值 將布爾值轉換為字符串 等等。 以下是您可以使用的技巧將一種類型轉換為另一種類型。我將涵蓋最常見的情況。 轉換為字符串 通常,從任何值轉換為字符串通常只需在任何值上調用 toString() 方法,JavaScript 將創建與該類型對應的字符串值。或者,您可以將任何值傳遞給 String() 全局函數。 從數字轉換為字符串 使用 String 全局函數,或者使用數字類型的 toString() 方法: String(10) //"10" (10).toString() //"10" 從布爾值轉換為字符串 使用 String 全局函數或布爾類型的 toString() 方法: String(true) //"true" true.toString() //"true" String(false) //"false" false.toString() //"false" 從日期轉換為字符串 使用 String 全局函數或日期類型的 toString() 方法: String(new Date('2019-01-22')) //"Tue Jan 22 2019 01:00:00 GMT+0100 (Central European Standard Time)" (new Date('2019-01-22'))....

Object create() 方法

了解 JavaScript Object 原型上 create() 方法的相關資訊。 在 ES5 中引入。 用於創建一個新的對象,並指定其原型。 使用方法: const newObject = Object.create(prototype) 範例: const animal = {} const dog = Object.create(animal) 新創建的對象將繼承所有原型對象的屬性。 您可以指定第二個參數以添加原型缺失的新屬性給對象: const newObject = Object.create(prototype, newProperties) 其中 newProperties 是一個對象,其中定義了每個屬性。 範例: const animal = {} const dog = Object.create(animal, { breed: { value: 'Siberian Husky' } }); console.log(dog.breed) //'Siberian Husky' 我並沒有只寫 breed: 'Siberian Husky',而是必須傳遞一個屬性描述對象,定義在本頁開頭。 Object.create() 經常與 Object.assign() 結合使用: const dog = Object.assign(Object.create(animal), { bark() { console.log('bark') } })

Object defineProperty() 方法

了解 JavaScript Object 物件的 defineProperty() 方法的所有相關資訊 創建或配置物件屬性。 返回該物件。 接受 3 個參數。第一個是我們將要在其上創建或配置屬性的物件。第二個是以字串形式定義的屬性名稱。第三個是具有屬性定義的物件。 範例: const dog = {} Object.defineProperty(dog, 'breed', { value: 'Siberian Husky' }) console.log(dog.breed) //'Siberian Husky' 我不只是寫了 breed: 'Siberian Husky',而是需要傳遞一個屬性描述符物件,該物件在本頁的開頭被定義。

Object getOwnPropertyDescriptors()方法

了解JavaScript Object对象的getOwnPropertyDescriptors()方法 此方法返回对象的所有自有(非继承)属性描述符。 Object.getOwnPropertyDescriptors(obj)接受一个对象,并返回一个提供属性描述符列表的新对象。 示例: const dog = {} Object.defineProperties(dog, { breed: { value: 'Siberian Husky' } }) Object.getOwnPropertyDescriptors(dog) /\* { breed: { value: 'Siberian Husky', writable: false, enumerable: false, configurable: false } } \*/ 有一个使用场景可以非常有用。ES2015给我们提供了Object.assign(),它可以复制一个或多个对象的所有可枚举自有属性,并返回一个新对象。但是它存在一个问题,就是它无法正确复制具有非默认属性的属性。 例如,如果一个对象只有一个setter,使用Object.assign()无法正确复制到新对象中。例如: const person1 = { set name(newName) { console.log(newName) } } 这个复制尝试将不起作用: const person2 = {} Object.assign(person2, person1) 但这个可以正常工作,并正确复制setter: const person3 = {} Object.defineProperties(person3, Object.getOwnPropertyDescriptors(person1)) 可以通过控制台测试看到: person1.name = 'x' "x" person2.name = 'x' person3.name = 'x' "x" person2不包含setter,它没有被复制过来。...

Object seal() 方法

了解 JavaScript Object 物件的 seal() 方法 JavaScript 的 Object 物件的 seal() 方法接受一個物件作為參數,並回傳相同的物件。傳入的物件會被改變,並成為一個不接受新屬性的封閉物件。新的屬性無法添加,現有的屬性無法移除,但現有的屬性可以更改。 範例: const dog = {} dog.breed = 'Siberian Husky' Object.seal(dog) dog.breed = 'Pug' dog.name = 'Roger' //TypeError: 無法添加屬性 name,物件不可擴展 傳入的參數也會作為回傳值,因此 dog === myDog(它們是同一個物件)。 類似於 Object.freeze(),但不會使屬性不可寫。它只是防止添加或移除屬性。 類似於 Object.preventExtensions(),但也禁止移除屬性: const dog = {} dog.breed = 'Siberian Husky' dog.name = 'Roger' Object.seal(dog) delete dog.name //TypeError: 無法刪除物件的 'name' 屬性

Object setPrototypeOf() 方法

了解 JavaScript Object 物件的 setPrototypeOf() 方法。 設置物件的原型。 別忘了,還能參閱我的 JavaScript 原型繼承 指南喔! 接受兩個參數:物件和原型。 用法: Object.setPrototypeOf(物件, 原型) 範例: const Animal = {} Animal.isAnimal = true const Mammal = Object.create(Animal) Mammal.isMammal = true console.log('-------') Mammal.isAnimal //true const dog = Object.create(Animal) dog.isAnimal //true console.log(dog.isMammal) //undefined Object.setPrototypeOf(dog, Mammal) console.log(dog.isAnimal) //true console.log(dog.isMammal) //true

Object 的 getOwnPropertySymbols() 方法

了解 JavaScript 中 Object 物件的 getOwnPropertySymbols() 方法。 獲取物件中定義的符號陣列。 符號(Symbols) 是 ES2015 的一個特性,這個方法也是在 ES2015 中引入的。 範例: const dog = {} const r = Symbol('Roger') const s = Symbol('Syd') dog[r] = { name: 'Roger', age: 6 } dog[s] = { name: 'Syd', age: 5 } Object.getOwnPropertySymbols(dog) //[ Symbol(Roger), Symbol(Syd) ]