JavaScript 中哪些数据类型有字面量表示
在 javascript 中,number、string、boolean、null、undefined、symbol、bigint 和 regexp 这八种基本类型或对象类型拥有字面量表示法。字面量允许开发者直接在代码中书写具体的值,而无需调用构造函数(如 new number())来创建实例。使用字面量不仅语法更简洁,而且能避免产生不必要的包装对象,从而保持数据类型的纯粹性。

字面量与构造函数的行为差异及陷阱
虽然字面量和构造函数都能生成对应的值,但它们在内存引用和类型判断上存在显著差异。例如,使用 new String('a') 创建的是对象,其类型为 object,而 'a' 是原始字符串。这种差异会导致 typeof 检查结果不同,且在比较相等性时可能引发意外。理解这一区别对于编写健壮的代码至关重要,特别是在处理 API 返回值或进行严格类型检查时。

const strLiteral = 'hello';
const strObject = new String('hello');
console.log(typeof strLiteral); // "string"
console.log(typeof strObject); // "object"
console.log(strLiteral === strObject); // false
console.log(strLiteral == strObject); // true (触发隐式转换)RegExp 字面量的编译特性与性能影响
正则表达式字面量(如 /pattern/flags)在代码解析阶段就会被编译并缓存,这意味着每次执行到该语句时,JavaScript 引擎不会重新编译正则表达式,而是直接使用已有的实例。相比之下,通过 new RegExp() 构造函数创建的正则表达式会在运行时动态编译。因此,在循环或高频调用的场景中,使用字面量表示的正则表达式具有更好的性能表现,且避免了重复编译的开销。
立即学习“Java免费学习笔记(深入)”;

// 字面量:解析时编译一次,后续复用
const regexLit = /test/g;
// 构造函数:每次调用都重新编译
const regexConst = new RegExp('test', 'g');
// 验证性能差异(概念性示例)
for (let i = 0; i < 10000; i++) {
'test'.match(regexLit); // 快速匹配
'test'.match(new RegExp('test', 'g')); // 每次新建并编译,较慢
}


















