Javascript引用数据类型详解
数组(Array)
- 数组中的元素的类型可以不同
创建数组
let fruits = ['apple', 'banana', 'orange'];
let numbers = new Array(1, 2, 3, 4, 5);
数组的属性,方法
length
: 数组的长度,可以变化
let fruits = ['apple', 'banana', 'orange'];
console.log(fruits.length); // 输出: 3
//访问"越界",也不会报错
var array = ["a", "b", "c"];
array[4] = 1; //改变类型,也不会报错
alert(array[4]);//1
-
slice(start,end)
: 截取元素,包头不包尾 -
sort()
: 排序 -
push()
:尾插一个或多个元素, 并返回插入后的长度。 -
pop()
:删除并返回数组末尾的元素。 -
forEach()
:遍历有值的元素,undefined
除外.
fruits.forEach((fruit) => {
console.log(fruit);
});
splice()
: 删除元素,返回一个数组,包含所有被删除的元素.
array.splice(1, 4);//从1索引位置开始,删除4个元素.
join()
:将数组元素连接成一个字符串。
console.log(fruits.join(', '));
-
indexOf()
: 获取元素的索引 -
reverse()
: 反转数组 -
concat()
: 在数组后追加数组,不改变原来的数组
let arr=[1,9,3,4];
arr.concat([6,6,6]);
//仍然输出1,9,3,4
for (const number of arr) {
console.log(number);
}
-
unshift()
: 头插 -
shift()
: 头删
函数
声明:
最常用声明:
function functionName(参数1,参数2...){
}
- 形参不需要类型,返回值也不需要类型,直接
return
即可`
使用函数表达式声明函数:
var add = function(x, y) {
return x + y;
};
使用箭头函数:
var multiply = (a, b) => a * b;
函数的作用域
- 在函数内部定义的变量,无法在函数外部访问。
function example() {
let l = "s";
console.log(l); // 输出: I'm local!
}
example();
// console.log(l); // 报错: localVar is not defined
对象(Object):
var objectName={
属性名1: 属性值1,
属性名2: 属性值2,
属性名3: 属性值3,
函数名: function(形参列表){}
};
-
调用属性
: 对象名.属性名; 对象名.函数名( ) -
可以动态的添加属性: 如
user.name = "Alice"
; -
对象中的所有键都是
字符串
, 值是任意对象检查对象是否直接拥有某个属性(而不是继承自原型链的属性)的方法 :person.hasOwnProperty("age")
, 键名用引号包裹.
Set
- 元素唯一,不会存储重复的值。
- 可迭代,可以使用
forEach
、for...of
遍历。
基本用法
let mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // 不会添加重复的 2
mySet.add("Hello");
mySet.add({ name: "Alice" });
console.log(mySet);
// Set(4) { 1, 2, 'Hello', { name: 'Alice' } }
常用方法
方法 | 作用 |
---|---|
add(value) | 添加 |
delete(value) | 删除指定值 |
has(value) | 检查是否包含该值 |
clear() | 清空set |
size | 获取长度 |
遍历
forEach()
:
let set = new Set(["apple", "banana", "orange"]);
set.forEach(value => {
console.log(value);
});
// apple
// banana
// orange
for...of
:
for (let item of set) {
console.log(item);
}
Map
- 键值对存储(类似
Object
)。 - 键的类型不限,可以是
Object
、Array
等(Object
只能用string
或symbol
作为键)。
基本用法
let myMap = new Map();
myMap.set("name", "Alice");
myMap.set(123, "Number key");
myMap.set({ a: 1 }, "Object key");
console.log(myMap);
// Map(3) { 'name' => 'Alice', 123 => 'Number key', { a: 1 } => 'Object key' }
常用方法
方法 | 作用 |
---|---|
set(key, value) | 添加键值对 |
get(key) | 根据key获取值 |
has(key) | 检查是否包含该键 |
delete(key) | 删除指定键 |
clear() | 清空所有键值对 |
size | 获取长度 |
遍历
forEach()
:
let map = new Map([
["name", "Alice"],
["age", 25],
]);
map.forEach((value, key) => {
console.log(key, value);
});
// name Alice
// age 25
for...of
:
for (let [key, value] of map) {
console.log(key, value);
}
// name Alice
// age 25
日期对象Date
创建:
new:
const now = new Date();
使用时间戳创建:
const dateFromMilliseconds = new Date(1633072800000); // 例如,表示特定日期和时间
使用日期字符串:
const dateFromString = new Date("2025-03-14T16:44:14");
```
##### 常用方法:
- 获取日期和时间:
```javascript
const year = now.getFullYear(); // 获取年份
const month = now.getMonth(); // 获取月份(0-11)
const date = now.getDate(); // 获取日期(1-31)
const hours = now.getHours(); // 获取小时(0-23)
const minutes = now.getMinutes(); // 获取分钟(0-59)
const seconds = now.getSeconds(); // 获取秒数(0-59)
```
- 设置日期和时间:
```javascript
now.setFullYear(2026); // 设置年份为 2026 年
now.setMonth(5); // 设置月份为六月
now.setDate(20); // 设置日期为 20 日
```
- 格式化日期:
```javascript
const dateString = now.toDateString(); // 获取可读的日期字符串
const timeString = now.toTimeString(); // 获取可读的时间字符串
```
#### 继承
- 原型链:`st (实例) → smallStudent.prototype → Student.prototype → Object.prototype`
```JavaScript
"use strict";
class Student {
constructor(name) {
this.name=name;
}
hello(){
return("hello!"+this.name);
}
}
//
// let s=new Student("warren");
//
// s.hello();
class smallStudent extends Student{
}
var st=new smallStudent("jim");
console.log(st.hello());