Skip to content

基本引用类型

Date 类型

1. 创建日期对象

javascript
// 当前时间
let now = new Date();

// 指定日期时间
let date1 = new Date("2023-12-25");
let date2 = new Date(2023, 11, 25, 12, 30, 0); // 月份从0开始

// 时间戳
let timestamp = Date.now();
let dateFromStamp = new Date(timestamp);

2. 日期格式化

javascript
let date = new Date();

// 标准格式
console.log(date.toDateString());    // "Mon Dec 25 2023"
console.log(date.toTimeString());    // "12:30:00 GMT+0800"
console.log(date.toLocaleDateString()); // 本地日期格式
console.log(date.toLocaleTimeString()); // 本地时间格式

// 自定义格式化
const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    hour: '2-digit',
    minute: '2-digit'
};
console.log(date.toLocaleString('zh-CN', options));

3. 日期计算

javascript
let date = new Date(2023, 11, 25);

// 获取时间戳
let timestamp = date.getTime();

// 日期运算
date.setDate(date.getDate() + 7);    // 加7天
date.setMonth(date.getMonth() + 1);  // 加1个月
date.setFullYear(date.getFullYear() + 1); // 加1年

// 计算时间差
let now = new Date();
let diff = now - date;  // 毫秒数
let days = Math.floor(diff / (1000 * 60 * 60 * 24));

RegExp 类型

1. 创建正则表达式

javascript
// 字面量形式
let pattern1 = /\d+/g;

// 构造函数形式
let pattern2 = new RegExp("\\d+", "g");

// 常用标志
// g: 全局匹配
// i: 不区分大小写
// m: 多行匹配
// s: 允许 . 匹配换行符
// u: Unicode 模式
// y: 粘附模式

2. 正则表达式方法

javascript
let text = "Hello 123 World 456";
let pattern = /\d+/g;

// test() 方法
console.log(pattern.test(text));     // true

// exec() 方法
let match;
while ((match = pattern.exec(text)) !== null) {
    console.log(match[0]);           // "123", "456"
}

// String 方法
console.log(text.match(pattern));    // ["123", "456"]
console.log(text.search(pattern));   // 6
console.log(text.replace(pattern, "#")); // "Hello # World #"

3. 常用正则表达式

javascript
// 电子邮件
const emailPattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;

// 手机号码(中国)
const phonePattern = /^1[3-9]\d{9}$/;

// URL
const urlPattern = /^https?:\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?$/;

// 密码强度(至少8位,包含大小写字母和数字)
const passwordPattern = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;

String 类型

1. 字符串创建与转换

javascript
// 字符串创建
let str1 = "Hello";
let str2 = String("World");
let str3 = new String("Hello");  // 不推荐

// 转换为字符串
let num = 123;
let str4 = num.toString();      // "123"
let str5 = String(num);         // "123"
let str6 = num + "";            // "123"

2. 字符串操作

javascript
let str = "Hello World";

// 基本属性和方法
console.log(str.length);        // 11
console.log(str.charAt(0));     // "H"
console.log(str[0]);           // "H"
console.log(str.charCodeAt(0)); // 72

// 查找子串
console.log(str.indexOf("o"));     // 4
console.log(str.lastIndexOf("o")); // 7
console.log(str.includes("World")); // true
console.log(str.startsWith("Hello")); // true
console.log(str.endsWith("World")); // true

// 截取子串
console.log(str.substring(0, 5));  // "Hello"
console.log(str.slice(6));         // "World"
console.log(str.substr(6, 5));     // "World" (不推荐)

// 大小写转换
console.log(str.toLowerCase());    // "hello world"
console.log(str.toUpperCase());    // "HELLO WORLD"

3. 字符串模式匹配

javascript
let text = "cat, bat, sat, fat";

// 替换
console.log(text.replace("at", "ond")); // "cond, bat, sat, fat"
console.log(text.replace(/at/g, "ond")); // "cond, bond, sond, fond"

// 分割
console.log(text.split(", "));    // ["cat", "bat", "sat", "fat"]
console.log(text.split(/[^\w]+/)); // ["cat", "bat", "sat", "fat"]

// 模板字面量
let name = "John";
let greeting = `Hello, ${name}!`;  // "Hello, John!"

4. 现代字符串方法

javascript
// 去除空白
let text = "  Hello World  ";
console.log(text.trim());         // "Hello World"
console.log(text.trimStart());    // "Hello World  "
console.log(text.trimEnd());      // "  Hello World"

// 重复字符串
console.log("abc".repeat(3));     // "abcabcabc"

// 填充字符串
console.log("5".padStart(3, "0")); // "005"
console.log("5".padEnd(3, "0"));   // "500"

// 查找所有匹配
let str = "hello hello hello";
let matches = str.matchAll(/hello/g);
for (const match of matches) {
    console.log(match.index);     // 0, 6, 12
}

Global 对象

1. URL 编码方法

javascript
// 编码
let url = "https://example.com/?name=张三&age=18";
let encoded = encodeURIComponent(url);
console.log(encoded);

// 解码
console.log(decodeURIComponent(encoded));

// URI 编码(不编码特殊字符)
console.log(encodeURI(url));
console.log(decodeURI(encoded));

2. 数值转换

javascript
// 字符串转数值
console.log(parseInt("123"));     // 123
console.log(parseFloat("123.45")); // 123.45
console.log(Number("123"));       // 123

// 进制转换
console.log(parseInt("1010", 2)); // 10
console.log(parseInt("FF", 16));  // 255

3. eval() 方法

javascript
// 不推荐使用 eval(),存在安全风险
eval("console.log('Hello')");     // Hello

// 替代方案
// 1. 使用 Function 构造函数
const fn = new Function("return 'Hello'");
console.log(fn());

// 2. JSON 解析
const json = '{"name": "John"}';
const obj = JSON.parse(json);

Math 对象

1. 数学常量

javascript
console.log(Math.PI);       // 3.141592653589793
console.log(Math.E);        // 2.718281828459045
console.log(Math.LN2);      // 0.6931471805599453
console.log(Math.LN10);     // 2.302585092994046

2. 数学运算

javascript
// 最值
console.log(Math.max(1, 2, 3));    // 3
console.log(Math.min(1, 2, 3));    // 1

// 舍入
console.log(Math.ceil(3.1));       // 4
console.log(Math.floor(3.9));      // 3
console.log(Math.round(3.5));      // 4
console.log(Math.trunc(3.9));      // 3

// 随机数
console.log(Math.random());        // 0-1之间的随机数

// 生成指定范围的随机整数
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

3. 三角函数

javascript
// 角度转弧度
function toRadians(degrees) {
    return degrees * Math.PI / 180;
}

// 三角函数
console.log(Math.sin(toRadians(90)));  // 1
console.log(Math.cos(toRadians(0)));   // 1
console.log(Math.tan(toRadians(45)));  // ≈1

最佳实践

  1. 使用字面量创建正则表达式,除非需要动态生成
  2. 优先使用新的字符串方法(如 includes 而不是 indexOf)
  3. 避免使用 eval(),使用更安全的替代方案
  4. 注意日期对象的月份是从0开始的
  5. 使用模板字面量代替字符串拼接
  6. 合理使用 Math 对象的方法进行数学计算

注意事项

  • 正则表达式要注意性能影响
  • 字符串操作注意编码问题
  • 日期计算要考虑时区问题
  • Math.random() 不适用于加密场景

练习题

  1. 实现一个函数,验证给定字符串是否是有效的电子邮件地址。
  2. 编写一个函数,将日期格式化为 "YYYY-MM-DD HH:mm:ss" 的形式。
  3. 实现一个函数,生成指定长度的随机密码,包含大小写字母和数字。
  4. 使用正则表达式实现一个简单的模板引擎。

扩展阅读

本站内容采用 "署名-非商业性使用-禁止演绎 4.0 国际许可协议" 进行许可