Object 的 isExtensible() 方法

了解 JavaScript Object 物件的 isExtensible() 方法 這個方法會檢查是否可以向物件新增新的屬性。 除非物件被以下的方法使用作為參數,否則任何物件都是可擴展的: Object.freeze() Object.seal() Object.preventExtensions() 使用方式: const dog = {} Object.isExtensible(dog) //true const cat = {} Object.freeze(cat) Object.isExtensible(cat) //false

Object 的 values() 方法

了解 JavaScript 中 Object 物件的 values() 方法 該方法會回傳包含所有物件自有屬性值的陣列。 使用方法: const person = { name: 'Fred', age: 87 } Object.values(person) // ['Fred', 87] Object.values() 也可用於陣列: const people = ['Fred', 'Tony'] Object.values(people) // ['Fred', 'Tony']

Object.entries() 方法

了解 JavaScript Object 对象的 entries() 方法。 在 ES2017 中引入。 此方法返回一个数组,包含所有对象自身属性的 [key, value] 对。 用法示例: const person = { name: 'Fred', age: 87 } Object.entries(person) // [['name', 'Fred'], ['age', 87]] Object.entries() 也适用于数组: const people = ['Fred', 'Tony'] Object.entries(people) // [['0', 'Fred'], ['1', 'Tony']] 你可以结合数组的 length 属性,使用它来计算对象包含的属性数量。

Object的getOwnPropertyNames()方法

了解JavaScript中Object对象的getOwnPropertyNames()方法 Object.getOwnPropertyNames()返回一个包含传入参数对象的所有自有属性名称的数组,包括不可枚举属性。它不考虑继承属性。 不可枚举属性不会被迭代。例如,在for..of循环中不会列出其属性。 如果只想获取可枚举属性的列表,可以使用Object.keys()。 示例: const dog = {} dog.breed = 'Siberian Husky' dog.name = 'Roger' Object.getOwnPropertyNames(dog) //[ 'breed', 'name' ]

Object的getPrototypeOf()方法

了解JavaScript Object对象的getPrototypeOf()方法。 返回对象的原型。 使用方法: Object.getPrototypeOf(obj) 示例: const animal = {} const dog = Object.create(animal) const prot = Object.getPrototypeOf(dog) animal === prot // true 如果对象没有原型,我们会得到null。这是Object对象的情况: Object.prototype // {} Object.getPrototypeOf(Object.prototype) // null

Object的is()方法

了解一下JavaScript中Object对象的is()方法。 這個方法在ES2015中被引入,它旨在幫助比較值。 用法: Object.is(a, b) 除非以下情況,否則結果始終為false: a和b是同一個對象 a和b是相等的字符串(字符串由相同的字符以相同的順序組成時,它們是相等的) a和b是相等的數字(當它們的值相等時,數字是相等的) a和b都是undefined,都是null,都是NaN,都是true或者都是false 在JavaScript中,0和-0是不同的值,所以在這種特殊情況下要注意(在比較之前,將它們都轉換為+0,例如使用+一元運算符)。

Object的isPrototypeOf()方法

了解JavaScript的Object.isPrototypeOf()方法 isPrototypeOf()是在一個物件實例上調用的,它接受一個物件作為參數。如果你調用isPrototypeOf()的物件出現在傳入的物件的原型鏈中,它將返回true,否則返回false。 範例: const Animal = { isAnimal: true } const Mammal = Object.create(Animal) Mammal.isMammal = true Animal.isPrototypeOf(Mammal) //true const dog = Object.create(Animal) Object.setPrototypeOf(dog, Mammal) Animal.isPrototypeOf(dog) //true Mammal.isPrototypeOf(dog) //true

Object的isSealed()方法

了解JavaScript Object对象的isSealed()方法。 接受一个对象作为参数,并在对象被封闭时返回true,否则返回false。当对象是Object.seal()函数的返回值时,对象会被封闭。 示例: const dog = {} dog.breed = 'Siberian Husky' const myDog = Object.seal(dog) Object.isSealed(dog) //true Object.isSealed(myDog) //true dog === myDog //true 在示例中,dog和myDog都是被封闭的。Object.seal()函数的参数会被修改,并且不能被解封。它也会作为返回值,因此dog === myDog(它们是完全相同的对象)。

The Object preventExtensions() method

了解JavaScript Object物件的preventExtensions()方法 JavaScript的preventExtensions()方法是Object物件中的一種方法,它接受一個物件作為參數,並返回相同的物件。傳遞的物件會被改變,成為一個不接受新屬性的物件。無法添加新的屬性,但可以刪除現有的屬性,並且可以更改現有的屬性。 範例: const dog = {} dog.breed = 'Siberian Husky' Object.preventExtensions(dog) dog.name = 'Roger' //TypeError: Cannot add property name, object is not extensible 傳遞的參數也會作為參數返回,因此dog === myDog(它們是同一個物件)。 我們無法添加新的屬性,但可以刪除現有的屬性: const dog = {} dog.breed = 'Siberian Husky' dog.name = 'Roger' Object.preventExtensions(dog) delete dog.name dog //{ breed: 'Siberian Husky' }

使用Rest和Spread處理物件和陣列

學習在JavaScript中使用兩種現代技術來處理陣列和物件。 你可以使用spread運算子 ...來展開陣列、物件或字串。 讓我們從一個陣列的例子開始。給定 const a = [1, 2, 3] 你可以使用以下方式創建一個新的陣列 const b = [...a, 4, 5, 6] 你也可以使用以下方式創建一個陣列的複製 const c = [...a] 這對於物件也同樣適用。使用以下方式克隆一個物件: const newObj = { ...oldObj } 對於字串,spread運算子會創建一個包含字串中每個字符的陣列: const hey = 'hey' const arrayized = [...hey] // ['h', 'e', 'y'] 這個運算子有一些非常有用的應用。其中最重要的一個是在非常簡單的方式下將陣列用作函數參數: const f = (arg1, arg2) => {} const a = [1, 2] f(...a) (在過去,你可以使用 f.apply(null, a) 來實現這一點,但這不太好看和易讀) rest元素在處理陣列解構時非常有用: const numbers = [1, 2, 3, 4, 5] [first, second, ....