初识ES6

65 阅读2分钟

变量

变量实际就是为值起名字,需要先声明然后再赋值

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进行依次判断,如果都不符合,才会最后执行defaultbreak则是一旦相等便会跳出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只会跳出内部循环。
由此例可以看出,该循环的逻辑过程: 逻辑过程

文章来源

wangdoc.com/javascript/…
wangdoc.com/es6/let.htm…