文章目录
什么是变量和常量,字面量
变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据,使用变量可以方便的获取或者修改内存中的数据。变量较为重要的是-声明方法-,-命名规则-和-作用域-三部分。
常量 指程序运行时,值不能改变的量为常量。通常用const来声明常量,声明固定的和精确的值(用处),但是过多的常量会降低程序的可读性和维护性(缺点),所以const使用较少,如需多次引用,建议使用变量。
字面量有的地方称为直接量,即看见什么,它就是什么。你也可以认为字面量就是一个值,比如变量的值。等号右侧的值均为字面量。
区别:
- 常量与变量的区别:常量与变量的存储方式是一样的,只不过常量必须要有初始值,而且值不允许被修改,而变量可以无初始值,且可以多次赋值。
- 常量与字面量的区别:常量与字面量均不会被改变。常量为存储数据的容器,而字面量为等号右侧的值,字面量是由字符串,数字等构成的字符串或数值。
声明变量
var只能声明一个变量,这个变量可以保存任何数据类型的值
var a = 1; //声明变量,赋初值为1
var b; // 声明变量,不赋值
b = 2; // 给变量赋值
一条语句,多个变量
您可以在一条语句中声明许多变量。
以 var 作为语句的开头,并以逗号分隔变量:
//var car = {c : 3, d :4, e, f :5};对象定义
var c = 3, d = 4, e, f = 5; // 声明多个变量
console.log(a, b, c, d, e, f);
结果如下:
1 2 3 4 undefined 5
声明可横跨多行:
var a =1,
b =2,
c = 3;
重复声明 JavaScript 变量
如果再次声明某个 JavaScript 变量,将不会丢它的值。
在这两条语句执行后,变量 a 的值仍然是 1:
实例:
var a =1;
var a;
但如果如下:
var a =1;
var a =2;
在这两条语句执行后,变量 a 的值会被覆盖为 2:
注意:声明之后,变量是没有值的(技术上,它的值是 undefined)
在脚本的开头声明所有变量是个好习惯
变量声明<=>对象定义
ES6之前并没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量,使用const定义常量后,常量无法改变
ES6中还新增了let关键字来声明变量,作用与var相似,但其所声明的变量只在声明所在块内有效
JavaScript 标识符,即所有 JavaScript 变量必须以唯一的名称的标识。这些唯一的名称称为标识符。标识符可以是短名称(比如 x 和 y),或者更具描述性的名称(age、sum、totalVolume)。
构造变量名称(唯一标识符)的命名规则和规范
规则 - 必须遵守的,不遵守会报错
- 必须以字母或下划线开头,也能以$和_符号开头(不推荐这么做),中间可以是数字、字母或下划线。
- 不能包含空格或 加号、减号等符号
- 不能使用JS中的关键字,如boolean ,for,else,this,in等。
- 严格区分大小写。
规范 - 建议遵守的,不遵守不会报错
- 变量名必须有意义
- 遵守驼峰命名法。(首字母小写,后面单词的首字母需要大写。例如:userName、userPassword)
变量提升(hoisting)
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
上面代码中,变量foo用var命令声明,会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量bar用let命令声明,不会发生变量提升。这表示在声明它之前,变量bar是不存在的,这时如果用到它,就会抛出一个错误。
函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。JavaScript 只有声明的变量会提升,初始化的不会。
为了避免这些问题,通常我们在每个作用域开始前声明这些变量,这也是正常的 JavaScript 解析步骤,易于我们理解。
JavaScript 中有六种数据类型包括:
五种基本数据类型
- Number:包含整数和浮点数两种类型。isNaN() 函数用于检查其参数是否是非数字值。
- String: 由Unicode字符,数字,标点符号等组成的序列。字符串数据包含在单引号或双引号中,同时单引号界定的字符串中可以有双引号,反之亦然。toString()方法可以将其他类型的数据转为字符串,但不能用于null和undefined。
- Boolean: 布尔型数据只有两个,true和false,一般用来判断某个事物是真还是假。
- Undefined: 声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。
- Null: 用于定义空的或不存在的引用。null并不等于空字符串或数字0。
复杂(引用)数据类型
- Object: 对象是一组属性与方法的集合。
用 typeof( 参数名 ) 函数可以返回参数的数据类型。
例如:
var apple=1;
var lemon="柠檬";
var banana=true;
var pear=null;
var orangr=undefine;
var peach=function peachSum(){
}
var water={};
console.log(typeof.water);
还有新添symbol对象可参考:
链接: https://es6.ruanyifeng.com/#docs/symbol.
作用域
作用域 指变量在程序中的有效范围。JS中根据作用域分为全局变量和局部变量。全局变量作用于整个脚本代码,局部变量只作用于定义的函数体内。
Let 关键词允许声明一个作用域被限制在块级中的变量、语句或者表达式。
常量作用域,是常量所在的块。(块可以理解为大括号)
for (i=0; i<5; i++) {
const A = 3;
console.log(A);
}
console.log(A); // 报错 Uncaught ReferenceError: A is not defined
function m() {
const B = 1;
}
m();
console.log(B); // 报错 Uncaught ReferenceError: B is not defined
生存期
生存期是指常量和变量在计算机中存在的有效时间。从编程的角度来说,可以简单地理解为常量或变量所赋的值在程序中的有效范围。
JavaScript中生存期有两种:全局和局部
全局的有效范围从其定义开始,一直到本程序结束为止。
局部的有效范围只有在该函数之中,当函数结束后,局部的生存期也就结束了。
<script >
var a = 100; //全局变量(公有)
let b = 200; //局部变量(私有)
//赋值过程叫复制
//关键字 变量 = 初值(字面量)
// const 常量 = 初值 常量就不可以改变的变量
//键对值 key = value
</script>