基本引用类型
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
最佳实践
- 使用字面量创建正则表达式,除非需要动态生成
- 优先使用新的字符串方法(如 includes 而不是 indexOf)
- 避免使用 eval(),使用更安全的替代方案
- 注意日期对象的月份是从0开始的
- 使用模板字面量代替字符串拼接
- 合理使用 Math 对象的方法进行数学计算
注意事项
- 正则表达式要注意性能影响
- 字符串操作注意编码问题
- 日期计算要考虑时区问题
- Math.random() 不适用于加密场景
练习题
- 实现一个函数,验证给定字符串是否是有效的电子邮件地址。
- 编写一个函数,将日期格式化为 "YYYY-MM-DD HH:mm:ss" 的形式。
- 实现一个函数,生成指定长度的随机密码,包含大小写字母和数字。
- 使用正则表达式实现一个简单的模板引擎。