# JavaScript有几种常量 在JavaScript中,常量(Constants)是编程中用于存储不可变值的重要概念。与变量不同,常量一旦声明并赋值后,其值在程序的整个生命周期中不能被重新赋值。ES6(ECMAScript 2015)引入了`const`关键字,使得常量的使用更加规范和广泛。本文将详细介绍JavaScript中常量的类型、特性以及实际应用场景。 ## 1. 基本常量 ### 1.1 使用`const`声明的常量 `const`是ES6中引入的关键字,用于声明一个只读的常量。常量的值在声明时必须初始化,且后续不能修改。 ```javascript const PI = 3.14159; console.log(PI); // 输出: 3.14159 // 尝试重新赋值会报错 PI = 3.14; // TypeError: Assignment to constant variable.
const
声明的常量具有块级作用域(Block Scope),这意味着它们只在声明它们的代码块内有效。
if (true) { const MAX = 100; console.log(MAX); // 输出: 100 } console.log(MAX); // ReferenceError: MAX is not defined
虽然const
声明的对象不能被重新赋值,但其属性可以修改。
const person = { name: "Alice", age: 25 }; person.age = 26; // 允许修改属性 console.log(person.age); // 输出: 26 // 尝试重新赋值会报错 person = {}; // TypeError: Assignment to constant variable.
类似地,数组常量中的元素可以被修改,但不能重新赋值整个数组。
const colors = ["red", "green", "blue"]; colors.push("yellow"); // 允许修改数组 console.log(colors); // 输出: ["red", "green", "blue", "yellow"] // 尝试重新赋值会报错 colors = []; // TypeError: Assignment to constant variable.
Object.freeze
如果需要完全不可变的对象,可以使用Object.freeze
方法。
const settings = Object.freeze({ theme: "dark", fontSize: 14 }); settings.theme = "light"; // 静默失败(非严格模式) console.log(settings.theme); // 输出: "dark"
Object.freeze
是浅冻结,如需深层冻结对象,需要递归调用。
function deepFreeze(obj) { Object.freeze(obj); Object.keys(obj).forEach(key => { if (typeof obj[key] === 'object') { deepFreeze(obj[key]); } }); } const config = deepFreeze({ db: { host: "localhost", port: 3306 } }); config.db.port = 5432; // 静默失败
JavaScript内置了一些数学常量,如Math.PI
。
console.log(Math.PI); // 输出: 3.141592653589793
在浏览器环境中,window
对象提供了一些全局常量,如Infinity
和NaN
。
console.log(Infinity); // 输出: Infinity console.log(NaN); // 输出: NaN
MAX_SIZE
)。const
:默认使用const
声明,除非明确需要重新赋值。Object.freeze
实现完全不可变的数据结构。const
不等于不可变:const
仅保证标识符不被重新赋值,不保证值的不可变性。const
声明的常量存在暂时性死区,不能在声明前访问。console.log(VERSION); // ReferenceError const VERSION = "1.0";
JavaScript中的常量主要包括: 1. 使用const
声明的基本常量; 2. 可修改属性的对象和数组常量; 3. 通过Object.freeze
实现的不可变常量; 4. 内置的数学和全局常量。
合理使用常量可以提高代码的可读性和安全性,减少因意外修改导致的错误。在ES6及以后的开发中,const
应成为默认的声明方式,而let
和var
仅在特殊场景下使用。
注意:本文基于ECMAScript 2022规范编写,部分特性在旧版浏览器中可能需要转译(如Babel)。 “`
这篇文章总计约950字,涵盖了JavaScript常量的核心知识点,包括语法、特性、应用场景和最佳实践,采用Markdown格式编写,便于阅读和扩展。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。