变量
变量实际就是为值起名字,需要先声明然后再赋值
let a
a = 1
console.log(a)
1 //a的值为1
// 返回值undefined
变量提升的存在性
JavaScript引擎的工作方式:先解析代码,获取所有变量(被声明),然后一行一行执行 通俗理解为,会把所有变量声明的语句在代码最前面,也就是变量提升
console.log(x)
var x = 1
//undefined
而Javascript引擎的执行代码为
var x //变量提升
console.log(x)
x = 1
先声明变量x,但是x并未被赋值,所以打印出的x值为undefined
三种声明变量的方式
let:符合逻辑,必须先声明才能调用,不存在变量提升,且只在块级作用域生效
//let
{
let x = 1
console.log(x)
}
该代码块便是let的块级作用域,用let声明的变量x,如果在块级作用域外调用便会报错
var: 不太符合逻辑,存在变量提升的现象,会升级到全局变量
//var
{
var x = 1
}
console.log(x) //1
由于存在变量提升,会在代码块外用var声明变量x,所以在代码块调用变量x也可以
const:声明一个常量,且常量的值 不能改变,且只在块级作用域生效
{
const x = 1
console.log(x)
let x = 2 //此时会报错
}
报错原因:const所声明的常量是不可变的。
标识符
标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名和函数名
标识符命名规则
- 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号(
$)和下划线(_)。 - 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字
0-9。
23 //第一个不能是数字
** //不能包含星号
a+b //不能包含加号
-d //不能包含减号和连词线
if-else紧邻关系
else代码块总是与向上离自己最近的那个if语句配对。
var m = 1
var n = 3
if(m!==1)
if(n===3) console.log('hello')
else console.log('world')
//undefined
由于else总是与向上最近的if配对,所以真正的代码是下面这样
var m = 1
var n = 3
if (m !== 1) {
if (n === 3) {
console.log('hello')
} else console.log('world')
}
switch
switch使用情景:多个if_else语句连用的情况
var x = 1;
switch (x) {
case true:
console.log('x 发生类型转换');
break;
default:
console.log('x 没有发生类型转换');
}
// x 没有发生类型转换
x是被判断的变量,判断var声明的变量x是否与switch里面的case的值是否相等;对每个case进行依次判断,如果都不符合,才会最后执行default。break则是一旦相等便会跳出switch结构。switch内部判断是否相等运用的是===,这意味着不会发生类型转换
while
规范
while(循环条件){
语句
循环体
}
var i = 0
while (i < 10) {
console.log(i)
i += 1
}
do……while循环
与while循环的最大区别便是:不管循环条件是否成立,都会先执行一次语句
规范
do {
语句
循环体
} while (循环条件);
记住最后的分号不能省
var x = 3;
var i = 0;
do {
console.log(i);
i++;
} while(i < x);
break和continue
break:跳出代码块或循环。
continue:立即终止本轮循环,返回循环结构的头部,开始下一轮循环。
如果存在多重循环,两者都是针对最内层循环。
标签 label
JavaScript 语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置。
规范
label:
语句
top:
for (let i = 0; i < 3; i++){
for (let j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
如果break后不加top,那么break只会跳出内部循环。
由此例可以看出,该循环的逻辑过程: