JavaScript 引用类型实例详解
JavaScript 中有两种主要的数据类型:基本类型和引用类型,基本类型包括Number
、String
、Boolean
、Undefined
、Null
和Symbol
,而引用类型则包括Object
和Array
,本文将详细讲解数组、对象以及严格模式等引用类型的使用和注意事项。
1. 数组(Array)
创建数组
// 使用 Array 构造函数 let arr1 = new Array(); let arr2 = new Array(5); // 创建一个长度为5的空数组 let arr3 = new Array('a', 'b', 'c'); // 创建一个包含 'a', 'b', 'c' 的数组 // 使用字面量语法 let arr4 = []; let arr5 = [1, 2, 3];
常用方法
方法名 | 描述 |
push | 向数组末尾添加一个或多个元素 |
pop | 移除数组末尾的一个元素 |
shift | 移除数组的第一个元素 |
unshift | 向数组开头添加一个或多个元素 |
slice | 返回一个新的数组,包含从 start 到 end(不包括该元素) |
splice | 通过删除或替换现有元素来修改数组的内容 |
concat | 合并两个或多个数组,不改变现有数组 |
join | 将数组的所有元素连接成一个字符串 |
reverse | 反转数组中元素的顺序 |
sort | 对数组的元素进行排序 |
map | 创建一个新数组,其结果是该数组中的每个元素调用一次提供的函数后的返回值 |
filter | 创建一个新数组,包含所有通过所提供函数实现的测试的元素 |
reduce | 对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值 |
示例代码
let fruits = ['apple', 'banana', 'cherry']; fruits.push('date'); // ['apple', 'banana', 'cherry', 'date'] fruits.pop(); // ['apple', 'banana', 'cherry'] fruits.unshift('elderberry'); // ['elderberry', 'apple', 'banana', 'cherry'] fruits.shift(); // ['apple', 'banana', 'cherry'] let slicedFruits = fruits.slice(1, 3); // ['banana', 'cherry'] fruits.splice(1, 0, 'blueberry'); // ['apple', 'blueberry', 'cherry'] let combinedFruits = fruits.concat(['dragonfruit']); // ['apple', 'blueberry', 'cherry', 'dragonfruit'] let joinedFruits = fruits.join(', '); // 'apple, blueberry, cherry' let reversedFruits = fruits.reverse(); // ['cherry', 'blueberry', 'apple'] let sortedFruits = fruits.sort(); // ['apple', 'blueberry', 'cherry'] let mappedFruits = fruits.map(fruit => fruit.toUpperCase()); // ['APPLE', 'BLUEBERRY', 'CHERRY'] let filteredFruits = fruits.filter(fruit => fruit.length > 6); // ['blueberry'] let reducedFruits = fruits.reduce((acc, fruit) => acc + fruit, ''); // 'appleblueberrycherry'
2. 对象(Object)
创建对象
// 使用对象字面量 let obj1 = {}; let obj2 = { name: 'John', age: 30 }; // 使用 Object 构造函数 let obj3 = new Object(); let obj4 = new Object({ name: 'Jane', age: 25 });
访问和修改属性
let person = { name: 'Alice', age: 28 }; console.log(person.name); // 'Alice' console.log(person['age']); // 28 person.age = 29; // 修改属性值 person['city'] = 'New York'; // 添加新属性 delete person.city; // 删除属性
遍历对象属性
for (let key in person) { if (person.hasOwnProperty(key)) { console.log(key + ": " + person[key]); } }
示例代码
let car = { make: 'Toyota', model: 'Corolla', year: 2020 }; console.log(car.make); // 'Toyota' car.year = 2021; // 修改属性值 car['color'] = 'red'; // 添加新属性 delete car.model; // 删除属性 for (let key in car) { if (car.hasOwnProperty(key)) { console.log(key + ": " + car[key]); } }
3. 严格模式(Strict Mode)
启用严格模式
"use strict"; function myFunction() { // 严格模式下的代码 }
严格模式的特点
禁止使用未声明的变量:在严格模式下,如果尝试使用未声明的变量会抛出错误。
禁止删除不可删除的属性:在严格模式下,不能删除不可删除的属性。
禁止重复定义参数:在严格模式下,函数参数不能有重复的名称。
禁止八进制语法:在严格模式下,不允许使用以零开头的八进制数。
禁止某些操作符:在严格模式下,某些操作符的行为会有所不同。
禁止给只读属性赋值:在严格模式下,不能给只读属性赋值。
禁止删除未定义的属性:在严格模式下,不能删除未定义的属性。
禁止扩展全局对象:在严格模式下,不能直接扩展全局对象。
禁止this关键字指向全局对象:在严格模式下,函数内部的this不会默认指向全局对象。
示例代码
"use strict"; function testStrictMode() { // x is not defined, will throw an error in strict mode x = 10; } testStrictMode(); // Uncaught ReferenceError: x is not defined
相关问题与解答
问题1:如何在JavaScript中创建一个包含特定元素的数组?
答:可以使用数组字面量语法或者Array
构造函数来创建一个包含特定元素的数组。
let fruits = ['apple', 'banana', 'cherry']; // 使用字面量语法 let numbers = new Array(1, 2, 3, 4, 5); // 使用构造函数
问题2:如何遍历一个对象的可枚举属性?
答:可以使用for...in
循环来遍历一个对象的可枚举属性。
let person = { name: 'Alice', age: 28, city: 'New York' }; for (let key in person) { if (person.hasOwnProperty(key)) { console.log(key + ": " + person[key]); } }
各位小伙伴们,我刚刚为大家分享了有关“JavaScript 引用类型实例详解【数组、对象、严格模式等】”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!