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来声明变量和常量 。