10JS变量及常量(三种容器关键字)

本文详细介绍了JavaScript中的标识符规则,包括命名规范和常见命名风格。接着讲解了保留关键字的使用限制,强调了变量声明与赋值的重要性。文章还对比了var、let和const的区别,特别是let和const在块级作用域中的行为。最后,讨论了全局作用域下使用var、let和const的影响,以及如何避免对window对象的意外污染。
摘要由CSDN通过智能技术生成

1、标识符

程序开发中,经常需要自定义一些符号来标记一些名称,并赋予其特定的用途,如变量名、函数名等,这些符号都被称为标识符。

定义规则:

  • 由大小写字母(a-zA-Z)、数字、下划线(_)和美元符号($)组成。
  • 不能以数字开头。
  • 严格区分大小写。
  • 不能使用JavaScript中的关键字命名。
  • 要尽量要做到“见其名知其意”。
    在这里插入图片描述
    当标识符中需要多个单词进行表示时,常见的表示方式有下划线法(如user_name)、驼峰法(如userName)和帕斯卡法(如UserName)。可根据开发需求统一规范命名的方式,如下划线方式通常应用于变量的命名,驼峰法通常应用于函数名的命名等。
//变量书写的多种形式
var firstName = 'Chen';//驼峰命名, js中常见
var first_name = 'Chen'; //php中等
var FirstName = 'Chen'; //特写场景,如类名
var firstname = 'Chen'; //使用场景并不多

2、保留关键字

保留关键字是指在JavaScript语言中被事先定义好并赋予特殊含义的单词。
在这里插入图片描述
关键字不能作为变量名和函数名使用,否则会使JavaScript在载入过程中出现语法错误。

未来保留关键字是指预留的,未来可能会成为保留关键字的单词。标识符在定义时,建议不要用未来保留关键字,避免将来转换为关键字时出现错误。
在这里插入图片描述

3、变量的使用

变量可以看作是存储数据的容器。
JavaScript中变量通常利用var关键字声明,并且变量名的命名规则与标识符相同。

  • 未赋初始值的变量,默认值会被设定为undefined。
  • 行末的分号表示语句结束。
  • 变量与变量之间的逗号(,)操作符,可实现一条语句同时完成多个变量的声明。
var sales;
var hits, hot, NEWS;
var room_101, room102;
var $name, $age;

4、变量的赋值

在这里插入图片描述
推荐在使用变量前,要养成先声明的良好习惯。

//初始化var
var greeting;
console.log(greeting); //undefined

//赋值
greeting = 'Hello'
console.log(greeting);

5、let定义变量

在函数作用域或全局作用域中通过关键字var声明的变量,无论在哪里声明,都会被当成在当前作用域顶部声明的变量,这就是JavaScript的提升机制。
在这里插入图片描述
这种变量提升机制会造成困扰,es6引入let声明,用法与var相同。

// let 
let a = 'soft';
console.log(a);
let b;
b = 'rj';
console.log(b)

let声明的变量不会被提升,可以把变量的作用域限制在当前代码块中。
let有作用域,常用在for循环、块{}、函数内部。
在这里插入图片描述
同一作用域下,不能使用let重复定义已经存在标识符

var index = 10;
let index = 20;
console.log(index); //报错,Identifier 'index' has already been declared

如果在不同的作用域下,是可以的。

var index = 10;
{
	let index = 20;
}
console.log(index);//10

6、const定义常量

  • 常量:可以理解为在脚本运行过程中值始终不变的量。
  • 特点:一旦被定义就不能被修改或重新定义。
  • 举例:数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。
  • 语法:ES6中新增了const关键字,用于实现常量的定义。
  • 常量命名规则:遵循标识符命名规则,习惯上常量名称总是使用大写字母表示。单词间⽤下划线隔开(_)。
  • 常量的值:常量在赋值时可以是具体的数据,也可以是表达式的值或变量。
    在这里插入图片描述
const x = 'Chen';
console.log(x);
//不能修改常量的值
// x = 'Xia'  //报错
//定义常量时一定要赋值
//const y; //报错,Missing initializer in const declaration

下面的代码也会报错:

const z;
z = 'ied';

但要注意,如果使用const声明对象,对象本身的绑定不能修改,但对象的属性和值是可以修改的。即常量赋值为对象后,虽不能重新赋值另外一个对象,但可以修改这个对象中某个属性的值。

const person = {
    name: 'Chen',
    age: 18,
};

//不能重新赋值另外一个对象
// person = {
//     name: 'Li',
//     age: 9,
// };

//可以修改对象中的某个属性
person.name = 'Xia'
person.age = 20
console.log(person)

数组同样如此,虽不能重新赋值另外一个数组,但可以修改数组中元素的值。

const numbers = [1, 2, 3, 4, 5];
numbers.push(6)
console.log(numbers);

//不能重新赋值另外一个对象
// numbers = [1, 2, 3, 4, 5, 7];

7、全局作用域绑定

在全局作用域中使用var 声明的变量或对象,将作为浏览器环境中的window对象的属性,这意味着使用var可能会无意中覆盖一个已经存在的全局属性。
在这里插入图片描述
如果在全局作用域中使用let或const,则会在全局作用域中创建一个新的绑定,该绑定不会成为window对象的属性。
在这里插入图片描述
综上,如果不想为全局对象window创建属性,或者为了避免覆盖window对象的属性,则应该使用let和const来声明变量和常量 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值