数组方法
改变数组的方法
1.push()方法
let fruits = ['apple', 'banana']; // 原始数组 console.log(fruits.length); // 打印原始数组的长度 fruits.push('orange'); // 向数组末尾添加一个元素 console.log(fruits); // 打印添加后的新数组 fruits.push('kiwi', 'pear'); // 向数组末尾添加多个元素 console.log(fruits); // 打印添加后的新数组 console.log(fruits.length); // 打印新数组的长度
结果:
2 [ 'apple', 'banana', 'orange' ] [ 'apple', 'banana', 'orange', 'kiwi', 'pear' ] 5
2.pop()方法
‘
let fruits = ['apple', 'banana', 'orange']; // 原始数组 console.log(fruits); // 打印原始数组 let lastFruit = fruits.pop(); // 从数组末尾删除最后一个元素 console.log(lastFruit); // 打印删除的元素 console.log(fruits); // 打印新数组
结果:
[ 'apple', 'banana', 'orange' ] orange [ 'apple', 'banana' ]
3.shift()方法
下面是一个
let fruits = ['apple', 'banana', 'orange']; let shiftedElement = fruits.shift(); console.log(shiftedElement); // 输出: 'apple' console.log(fruits); // 输出: ['banana', 'orange']
4.unshift()方法
下面是一个
let fruits = ['banana', 'orange']; let newLength = fruits.unshift('apple', 'grape'); console.log(newLength); // 输出: 4 console.log(fruits); // 输出: ['apple', 'grape', 'banana', 'orange']
5.reverse() 方法
下面是一个
let arr = ['apple', 'banana', 'orange']; arr.reverse(); console.log(arr); // 输出: ['orange', 'banana', 'apple']
6.sort() 方法
下面是一个
let arr = ['orange', 'banana', 'apple']; arr.sort(); console.log(arr); // 输出: ['apple', 'banana', 'orange']
7.splice()方法
下面是一些
- 删除元素:
let arr = ['apple', 'banana', 'orange']; arr.splice(1, 1); // 从索引位置 1 开始删除一个元素 console.log(arr); // 输出: ['apple', 'orange']
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:'apple'、'banana' 和 'orange'。通过调用splice() 方法并传入参数 1 和 1,我们从索引位置 1 开始删除了一个元素。最后,我们打印出更新后的arr 数组。 - 替换元素:
let arr = ['apple', 'banana', 'orange']; arr.splice(1, 1, 'grape'); // 从索引位置 1 开始删除一个元素,并在该位置插入 'grape' console.log(arr); // 输出: ['apple', 'grape', 'orange']
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:'apple'、'banana' 和 'orange'。通过调用splice() 方法并传入参数 1、1 和 'grape',我们从索引位置 1 开始删除了一个元素,并在该位置插入了新元素 'grape'。最后,我们打印出更新后的arr 数组。 - 插入元素:
let arr = ['apple', 'banana', 'orange']; arr.splice(2, 0, 'grape'); // 在索引位置 2 插入 'grape',不删除任何元素 console.log(arr); // 输出: ['apple', 'banana', 'grape', 'orange']
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:'apple'、'banana' 和 'orange'。通过调用splice() 方法并传入参数 2、0 和 'grape',我们在索引位置 2 插入了新元素 'grape',并且没有删除任何元素。最后,我们打印出更新后的arr 数组。
不变更原数组的方法
8.concat()方法
下面是一些
- 合并数组:
let arr1 = ['apple', 'banana']; let arr2 = ['orange', 'grape']; let newArr = arr1.concat(arr2); console.log(newArr); // 输出: ['apple', 'banana', 'orange', 'grape']
在上面的示例中,我们有两个数组
arr1 和arr2 ,分别包含两个元素。通过调用concat() 方法将这两个数组合并成一个新数组newArr ,我们得到了一个包含所有元素的新数组。最后,我们打印出新数组newArr 。 - 合并值和数组:
let arr = ['apple', 'banana']; let newArr = arr.concat('orange', ['grape']); console.log(newArr); // 输出: ['apple', 'banana', 'orange', 'grape']
在上面的示例中,我们有一个数组
arr ,包含两个元素。通过调用concat() 方法并传入字符串'orange' 和数组['grape'] ,我们将这些值和数组合并成一个新数组newArr 。最后,我们打印出新数组newArr 。 - 合并多个数组:
let arr1 = ['apple']; let arr2 = ['banana']; let arr3 = ['orange']; let newArr = arr1.concat(arr2, arr3); console.log(newArr); // 输出: ['apple', 'banana', 'orange']
在上面的示例中,我们有三个数组
arr1 、arr2 和arr3 ,每个数组只包含一个元素。通过调用concat() 方法并传入这三个数组,我们将它们合并成一个新数组newArr 。最后,我们打印出新数组newArr 。
9.join()方法
下面是一些
- 使用默认分隔符:
let arr = ['apple', 'banana', 'orange']; let str = arr.join(); console.log(str); // 输出: "apple,banana,orange"
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:'apple'、'banana' 和 'orange'。通过调用join() 方法,它会将数组中的所有元素转换为一个字符串,并使用默认的逗号分隔符连接它们。最后,我们打印出连接后的字符串str 。 - 使用自定义分隔符
let arr = ['apple', 'banana', 'orange']; let str = arr.join('-'); console.log(str); // 输出: "apple-banana-orange"
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:'apple'、'banana' 和 'orange'。通过调用join('-') 方法,它会将数组中的所有元素转换为一个字符串,并使用自定义的连字符分隔符连接它们。最后,我们打印出连接后的字符串str 。 - 连接数字数组:
let arr = [1, 2, 3]; let str = arr.join(''); console.log(str); // 输出: "123"
在上面的示例中,我们有一个名为
arr 的数组,包含三个元素:1、2 和 3。通过调用join('') 方法,它会将数组中的所有元素转换为一个字符串,并使用空字符串作为分隔符连接它们。由于数组中的元素都是数字,它们会被转换为字符串并连接在一起。最后,我们打印出连接后的字符串str 。
10.slice() 方法
下面是一些
- 提取字符串的一部分:
let str = "Hello, World!"; let newStr = str.slice(7, 12); console.log(newStr); // 输出: "World"
在上面的示例中,我们有一个名为
str 的字符串。通过调用slice(7, 12) 方法,它会从索引位置 7 开始提取字符串,并一直提取到索引位置 12(不包括该位置),得到一个新的字符串newStr 。最后,我们打印出提取出的新字符串newStr 。 - 提取数组的一部分:
let arr = [1, 2, 3, 4, 5]; let newArr = arr.slice(2, 4); console.log(newArr); // 输出: [3, 4]
在上面的示例中,我们有一个名为
arr 的数组。通过调用slice(2, 4) 方法,它会从索引位置 2 开始提取数组,并一直提取到索引位置 4(不包括该位置),得到一个新的数组newArr 。最后,我们打印出提取出的新数组newArr 。 - 不带参数的使用:
let str = "Hello, World!"; let newStr = str.slice(); console.log(newStr); // 输出: "Hello, World!"
在上面的示例中,我们有一个名为
str 的字符串。通过调用slice() 方法而不传递任何参数,它会返回原始字符串的副本,即与原始字符串相同的新字符串newStr 。最后,我们打印出新字符串newStr 。
11.toString()
下面是一些
- 转换数字为字符串:
let num = 123; let str = num.toString(); console.log(str); // 输出: "123"
在上面的示例中,我们有一个名为
num 的数字。通过调用toString() 方法,它会将数字转换为字符串,并赋值给变量str 。最后,我们打印出转换后的字符串str 。 - 转换布尔值为字符串:
let bool = true; let str = bool.toString(); console.log(str); // 输出: "true"
在上面的示例中,我们有一个名为
bool 的布尔值。通过调用toString() 方法,它会将布尔值转换为字符串,并赋值给变量str 。最后,我们打印出转换后的字符串str 。 - 转换数组为字符串:
let arr = [1, 2, 3]; let str = arr.toString(); console.log(str); // 输出: "1,2,3"
在上面的示例中,我们有一个名为
arr 的数组。通过调用toString() 方法,它会将数组转换为字符串,并赋值给变量str 。最后,我们打印出转换后的字符串str 。需要注意的是,
toString() 方法仅适用于基本数据类型(如数字、布尔值等)和一些内置对象(如数组)。对于自定义对象,可以通过重写对象的toString() 方法来实现自定义的字符串转换逻辑。
12.indexOf() 方法
下面是一些
- 查找字符串中的子串:
let str = "Hello, World!"; let index = str.indexOf("World"); console.log(index); // 输出: 7
在上面的示例中,我们有一个名为
str 的字符串。通过调用indexOf("World") 方法,它会在字符串中查找子串 "World" 并返回其在字符串中的索引值。最后,我们打印出子串在字符串中的索引值index 。 - 查找数组中的元素:
let arr = [1, 2, 3, 4, 5]; let index = arr.indexOf(3); console.log(index); // 输出: 2
在上面的示例中,我们有一个名为
arr 的数组。通过调用indexOf(3) 方法,它会在数组中查找元素 3 并返回其在数组中的索引值。最后,我们打印出元素在数组中的索引值index 。 - 查找不存在的元素:
let arr = [1, 2, 3, 4, 5]; let index = arr.indexOf(6); console.log(index); // 输出: -1
在上面的示例中,我们有一个名为
arr 的数组。通过调用indexOf(6) 方法,它会在数组中查找元素 6 并返回其在数组中的索引值。由于数组中不存在元素 6,因此indexOf() 方法将返回 -1。需要注意的是,
indexOf() 方法是区分大小写的。如果要进行不区分大小写的查找,则可以先将字符串或数组中的所有元素转换为小写或大写字母,然后再进行查找
13.lastIndexOf()方法
下面是一些
- 查找字符串中的子串:
let str = "Hello, World!"; let index = str.lastIndexOf("o"); console.log(index); // 输出: 8
在上面的示例中,我们有一个名为
str 的字符串。通过调用lastIndexOf("o") 方法,它会在字符串中从后向前查找字符 "o" 并返回最后一次出现的索引值。最后,我们打印出字符在字符串中的索引值index 。 - 查找数组中的元素:
let arr = [1, 2, 3, 4, 3]; let index = arr.lastIndexOf(3); console.log(index); // 输出: 4
在上面的示例中,我们有一个名为
arr 的数组。通过调用lastIndexOf(3) 方法,它会在数组中从后向前查找元素 3 并返回最后一次出现的索引值。最后,我们打印出元素在数组中的索引值index 。 - 查找不存在的元素:
let arr = [1, 2, 3, 4, 5]; let index = arr.lastIndexOf(6); console.log(index); // 输出: -1
在上面的示例中,我们有一个名为
arr 的数组。通过调用lastIndexOf(6) 方法,它会在数组中从后向前查找元素 6 并返回最后一次出现的索引值。由于数组中不存在元素 6,因此lastIndexOf() 方法将返回 -1。需要注意的是,
lastIndexOf() 方法是区分大小写的。如果要进行不区分大小写的查找,则可以先将字符串或数组中的所有元素转换为小写或大写字母,然后再进行查找。
14.includes()方法示例
下面是一些
- 检查字符串中是否包含子串:
let str = "Hello, World!"; let result = str.includes("World"); console.log(result); // 输出: true
在上面的示例中,我们有一个名为
str 的字符串。通过调用includes("World") 方法,它会检查字符串中是否包含子串 "World"。由于字符串中包含该子串,因此includes() 方法将返回true 。 - 检查数组中是否包含元素:
let arr = [1, 2, 3, 4, 5]; let result = arr.includes(3); console.log(result); // 输出: true
在上面的示例中,我们有一个名为
arr 的数组。通过调用includes(3) 方法,它会检查数组中是否包含元素 3。由于数组中包含该元素,因此includes() 方法将返回true 。 - 检查不存在的元素:
let arr = [1, 2, 3, 4, 5]; let result = arr.includes(6); console.log(result); // 输出: false
在上面的示例中,我们有一个名为
arr 的数组。通过调用includes(6) 方法,它会检查数组中是否包含元素 6。由于数组中不存在该元素,因此includes() 方法将返回false 。需要注意的是,
includes() 方法也是区分大小写的。如果要进行不区分大小写的检查,则可以先将字符串或数组中的所有元素转换为小写或大写字母,然后再进行检查。
迭代方法
15.forEach() 方法
const array = [1, 2, 3, 4, 5]; array.forEach((element) => { console.log(element); }); // 输出: // 1 // 2 // 3 // 4 // 5
在上面的示例中,我们定义了一个名为
除了打印元素的值,你还可以在回调函数中执行其他操作,例如修改元素、计算总和等等。
需要注意的是,
16.map()方法
const array = [1, 2, 3, 4, 5]; const newArray = array.map((element) => { return element * 2; }); console.log(newArray); // 输出:[2, 4, 6, 8, 10]
17.filter()方法
const array = [1, 2, 3, 4, 5]; const newArray = array.filter((element) => { return element % 2 === 0; }); console.log(newArray); // 输出:[2, 4]
在上面的示例中,我们定义了一个名为
回调函数中的
18.reduce()
const array = [1, 2, 3, 4, 5]; const sum = array.reduce((accumulator, currentValue) => { return accumulator + currentValue; }, 0); console.log(sum); // 输出:15
在上面的示例中,我们定义了一个名为
在示例中,我们使用了初始值 0,将累加器的初始值设置为 0。回调函数中,我们将累加器
19.reduceRight()
const array = ["a", "b", "c", "d", "e"]; const result = array.reduceRight((accumulator, currentValue) => { return accumulator + currentValue; }); console.log(result); // 输出:'edcba'
在上面的示例中,我们定义了一个名为
20.every()方法
const array = [1, 2, 3, 4, 5]; const result = array.every((element) => { return element > 0; }); console.log(result); // 输出:true
在上面的示例中,我们定义了一个名为
回调函数中的
21.some()方法
const array = [1, 2, 3, 4, 5]; const result = array.some((element) => { return element > 3; }); console.log(result); // 输出:true
在上面的示例中,我们定义了一个名为
回调函数中的
22.find()方法
const array = [1, 2, 3, 4, 5]; const result = array.find((element) => { return element > 3; }); console.log(result); // 输出:4
在上面的示例中,我们定义了一个名为
回调函数中的
23.findIndex()
const array = [1, 2, 3, 4, 5]; const index = array.findIndex((element) => { return element > 3; }); console.log(index); // 输出:3
在上面的示例中,我们定义了一个名为
回调函数中的
其他
24.Array.from()
const str = "Hello"; const array = Array.from(str); console.log(array); // 输出:["H", "e", "l", "l", "o"]
在上面的示例中,我们定义了一个名为
转换后的数组被存储在名为
25.Array.isArray()
const array = [1, 2, 3]; console.log(Array.isArray(array)); // 输出:true const str = "Hello"; console.log(Array.isArray(str)); // 输出:false
在上面的示例中,我们定义了一个名为
通过调用
在示例中,由于
另外,我们还定义了一个名为
26.Array.of()
const array1 = Array.of(1, 2, 3); console.log(array1); // 输出:[1, 2, 3] const array2 = Array.of("Hello", "world"); console.log(array2); // 输出:["Hello", "world"] const array3 = Array.of(1, "Hello", true); console.log(array3); // 输出:[1, "Hello", true]
在上面的示例中,我们分别使用
首先,我们在第一行中使用
在第二个示例中,我们创建了一个包含两个字符串元素的新数组,每个字符串都被视为一个独立的元素。
在第三个示例中,我们创建了一个包含三个不同类型的元素的数组,每个元素都被视为一个独立的元素。注意,在使用
对象方法
原型链相关
27.hasOwnProperty()
const obj = { name: "Alice", age: 25 }; console.log(obj.hasOwnProperty("name")); // 输出:true console.log(obj.hasOwnProperty("toString")); // 输出:false
在上面的示例中,我们定义了一个名为
然后,我们使用
接着,我们使用
29.isPrototypeOf()
function Animal() {} function Cat() {} Cat.prototype = Object.create(Animal.prototype); const animal = new Animal(); const cat = new Cat(); console.log(Animal.prototype.isPrototypeOf(animal)); // 输出:true console.log(Animal.prototype.isPrototypeOf(cat)); // 输出:true console.log(Cat.prototype.isPrototypeOf(animal)); // 输出:false console.log(Cat.prototype.isPrototypeOf(cat)); // 输出:true
在上面的示例中,我们定义了
然后,我们分别创建了一个
接着,我们使用
首先,我们调用
然后,我们调用
接下来,我们调用
最后,我们调用
30.propertyIsEnumerable()
const obj = { name: "Alice", age: 25 }; console.log(obj.propertyIsEnumerable("name")); // 输出:true console.log(obj.propertyIsEnumerable("toString")); // 输出:false console.log(obj.propertyIsEnumerable("valueOf")); // 输出:false
在上面的示例中,我们定义了一个名为
然后,我们使用
首先,我们调用
接着,我们调用
最后,我们调用
静态方法
31.Object.assign()
const target = { name: "Alice", age: 25 }; const source1 = { age: 30 }; const source2 = { address: "Beijing" }; const result = Object.assign(target, source1, source2); console.log(result); // 输出:{ name: "Alice", age: 30, address: "Beijing" }
在上面的示例中,我们定义了一个名为
然后,我们定义了两个源对象:
接着,我们调用
在上面的示例中,
最后,
32.Object.create()
const person = { greet: function() { console.log(`Hello, my name is ${this.name}.`); } }; const alice = Object.create(person); alice.name = "Alice"; alice.greet(); // 输出:Hello, my name is Alice.
在上面的示例中,我们定义了一个名为
然后,我们使用
接着,我们为
最后,我们调用
33.Object.defineProperty()
const obj = {}; Object.defineProperty(obj, "name", { value: "Alice", writable: false, enumerable: true, configurable: true }); console.log(obj.name); // 输出:Alice obj.name = "Bob"; console.log(obj.name); // 输出:Alice
在上面的示例中,我们定义了一个空对象
然后,我们使用
属性描述符对象包含了要定义的属性的各种特性,如
在上面的示例中,我们将
接着,我们通过
最后,我们尝试将
34.Object.defineProperties()
const obj = {}; Object.defineProperties(obj, { name: { value: "Alice", writable: false, enumerable: true, configurable: true }, age: { value: 25, writable: true, enumerable: true, configurable: true } }); console.log(obj.name); // 输出:Alice obj.name = "Bob"; console.log(obj.name); // 输出:Alice console.log(obj.age); // 输出:25 obj.age = 30; console.log(obj.age); // 输出:30
在上面的示例中,我们定义了一个空对象
然后,我们使用
每个属性描述符对象都包含了要定义的属性的各种特性,如
在上面的示例中,我们将
我们还将
接着,我们通过
接着,我们通过
35.Object.entries()
const obj = { name: "Alice", age: 25, city: "New York" }; const entries = Object.entries(obj); console.log(entries); // 输出:[["name", "Alice"], ["age", 25], ["city", "New York"]]
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
这样,我们就可以使用
36.Object.freeze()
const obj = { name: "Alice", age: 25, city: "New York" }; Object.freeze(obj); obj.name = "Bob"; obj.age = 30; obj.gender = "female"; delete obj.city; console.log(obj); // 输出:{ name: "Alice", age: 25, city: "New York" } console.log(Object.isFrozen(obj)); // 输出:true
在上面的示例中,我们有一个名为
然后,我们使用
接着,我们尝试修改
但由于我们已经使用
最后,我们通过
另外,我们使用
37.Object.getOwnPropertyDescriptor()
const obj = { name: "Alice", age: 25, city: "New York" }; const descriptor = Object.getOwnPropertyDescriptor(obj, "name"); console.log(descriptor); // 输出:{ value: "Alice", writable: true, enumerable: true, configurable: true }
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
通过使用
38.Object.getOwnPropertyDescriptors()
const obj = { name: "Alice", age: 25, city: "New York" }; const descriptors = Object.getOwnPropertyDescriptors(obj); console.log(descriptors); /* 输出: { name: { value: 'Alice', writable: true, enumerable: true, configurable: true }, age: { value: 25, writable: true, enumerable: true, configurable: true }, city: { value: 'New York', writable: true, enumerable: true, configurable: true } } */
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
通过使用
39.Object.getOwnPropertyNames()
const obj = { name: "Alice", age: 25, city: "New York" }; const propertyNames = Object.getOwnPropertyNames(obj); console.log(propertyNames); // 输出:[ 'name', 'age', 'city' ]
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
注意,
40.Object.getOwnPropertySymbols()
const obj = { [Symbol("key1")]: "value1", [Symbol("key2")]: "value2", name: "Alice" }; const symbols = Object.getOwnPropertySymbols(obj); console.log(symbols); // 输出:[Symbol(key1), Symbol(key2)]
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
注意,
41.Object.getPrototypeOf()
const obj = { name: "Alice", age: 25 }; const prototype = Object.getPrototypeOf(obj); console.log(prototype); // 输出:{}
在上面的示例中,我们有一个名为
然后,我们使用
最后,我们通过
注意,
42.Object.is()
console.log(Object.is(1, 1)); // 输出:true console.log(Object.is("hello", "hello")); // 输出:true console.log(Object.is(true, true)); // 输出:true console.log(Object.is(null, null)); // 输出:true console.log(Object.is(undefined, undefined)); // 输出:true console.log(Object.is(NaN, NaN)); // 输出:true console.log(Object.is(0, -0)); // 输出:false console.log(Object.is({}, {})); // 输出:false
在上面的示例中,我们使用了
- 对于相同的原始值(如数字、字符串、布尔值、null 和 undefined),它们的比较结果为
true 。 - 对于 NaN,它与自身的比较结果也为
true 。 - 但是,对于 0 和 -0 的比较,它们的比较结果为
false ,因为在 JavaScript 中,0 和 -0 被视为不同的值。 - 对于两个不同的对象字面量或通过构造函数创建的对象,它们的比较结果为
false 。
43.Object.preventExtensions()
const obj = { name: "Alice", age: 25 }; console.log(Object.isExtensible(obj)); // 输出:true Object.preventExtensions(obj); console.log(Object.isExtensible(obj)); // 输出:false obj.gender = "female"; console.log(obj.gender); // 输出:undefined
在上面的示例中,我们有一个名为
首先,我们使用
然后,我们使用
接着,我们再次使用
最后,我们尝试向
使用
44.Object.seal()
const obj = { name: "Alice", age: 25 }; console.log(Object.isSealed(obj)); // 输出:false Object.seal(obj); console.log(Object.isSealed(obj)); // 输出:true delete obj.name; console.log(obj.name); // 输出:"Alice" obj.age = 30; console.log(obj.age); // 输出:30
在上面的示例中,我们有一个名为
首先,我们使用
然后,我们使用
接着,我们再次使用
最后,我们尝试删除
我们还尝试修改
使用
45.Object.keys()
const obj = { name: "Alice", age: 25, gender: "female" }; const keys = Object.keys(obj); console.log(keys); // 输出:["name", "age", "gender"]
在上面的示例中,我们有一个名为
我们使用
通过
使用
46.Object.values()
const obj = { name: "Alice", age: 25, gender: "female" }; const values = Object.values(obj); console.log(values); // 输出:["Alice", 25, "female"]
在上面的示例中,我们有一个名为
我们使用
通过
使用
47.Object.isFrozen()
const obj = { name: "Alice", age: 25 }; console.log(Object.isFrozen(obj)); // 输出:false Object.freeze(obj); console.log(Object.isFrozen(obj)); // 输出:true obj.name = "Bob"; console.log(obj.name); // 输出:"Alice" delete obj.age; console.log(obj.age); // 输出:25
在上面的示例中,我们有一个名为
首先,我们使用
然后,我们使用
接着,我们再次使用
最后,我们尝试修改
我们还尝试删除
使用
48.Object.isSealed()
const obj = { name: "Alice", age: 25 }; console.log(Object.isSealed(obj)); // 输出:false Object.seal(obj); console.log(Object.isSealed(obj)); // 输出:true obj.name = "Bob"; console.log(obj.name); // 输出:"Bob" delete obj.age; console.log(obj.age); // 输出:undefined
在上面的示例中,我们有一个名为
首先,我们使用
然后,我们使用
接着,我们再次使用
最后,我们尝试修改
我们还尝试删除
使用
49.Object.isExtensible()
const obj = { name: "Alice", age: 25 }; console.log(Object.isExtensible(obj)); // 输出:true Object.preventExtensions(obj); console.log(Object.isExtensible(obj)); // 输出:false obj.city = "New York"; console.log(obj.city); // 输出:undefined
在上面的示例中,我们有一个名为
首先,我们使用
然后,我们使用
接着,我们再次使用
最后,我们尝试添加新的属性
使用
50.Object.setPrototypeOf()
const obj = { name: "Alice", age: 25 }; const newObj = { city: "New York" }; Object.setPrototypeOf(newObj, obj); console.log(newObj.name); // 输出:"Alice" console.log(newObj.age); // 输出:25 console.log(newObj.city); // 输出:"New York"
在上面的示例中,我们有两个对象:
首先,我们定义了一个名为
然后,我们定义了一个名为
接着,我们使用
最后,我们通过
使用