聊一聊JavaScript基础巩固提高系列课程(二)---基础语法全解

1 语句

JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。

而表达式是为了完成某种任务才进行的操作

最根本的区别是

语句一定没有返回值 ,比如 var  a = 1+3;

表达式一定有返回值 比如  1+3;

语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。

特殊:

;;;

也是语句,视为空语句,但是是三个空语句,但是这样的语句也就在这扯扯,没有丝毫意义


2 变量

变量的作用就是为值起名,然后引用这这个名字,就等同于引用这个名字所指向的值!!!

var a = 1;

上述语句就是在a和1之间建立了引用关系,需要注意的是:上述语句其实是分为两步:

var a;
a = 1;

如果只是声明了变量但是没有给他赋值,则变量的值为undefined,undefined是一个 JavaScript 关键字,表示“无定义”。

如果变量赋值的时候,忘了写var命令,这条语句也是有效的。

var a = 1;
// 基本等同
a = 1;

但是不是用  var 关键字,非常不利于表达意图,并且常常神不知鬼不觉的创建全局变量,导致污染,因此不建议使用!

如果一个变量未声明就直接使用,会报错,提示你undefined

x
// ReferenceError: x is not defined

变量的类型没有限制,可以随时更改

var a = 1;
a = 'hello';

如果使用var重新声明一个已经存在的变量,是无效的。

var x = 1;
var x;
x // 1

但是,如果第二次声明的时候还进行了赋值,则会覆盖掉前面的值。

var x = 1;
var x = 2;

// 等同于

var x = 1;
var x;
x = 2;

变量的提升:

JavaScript 引擎的工作方式是,先解析代码,然后获取所有的被声明的变量,然后一行一行的运行,这造成的结构就是所哟的声明语句都会被提到代码的头部,这就是变量提升

console.log(a);
var a = 1;

相当于

var a;
console.log(a);
a =1;

最后结果为undefined,无可厚非

3 标识符

标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名

第一个字符不能为数字,可以是字母,下划线,美元符号,后边的所有字符均可以为数字,字母,下划线,美元符号

注意:标识符不能包含-(减号或横线),中文也是合法的标识符,标识符不能为关键字

4 注释

单行注释://

多行注释:/**/

此外,由于历史上 JavaScript 可以兼容 HTML 代码的注释,所以<!--和-->也被视为合法的单行注释。

但是-->只有在行首才会被当作单行注释

x = 1; <!-- x = 2;
--> x = 3;
上面代码中,只有x = 1会执行,其他的部分都被注释掉了。

需要注意的是,-->只有在行首,才会被当成单行注释,否则会当作正常的运算。

function countdown(n) {
  while (n --> 0) console.log(n);
}
countdown(3)
// 2
// 1
// 0

上面代码中,n --> 0实际上会当作n-- > 0,因此输出2、1、0。


5 区块

JavaScript 使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。

对于var命令来说,JavaScript 的区块不构成单独的作用域(scope)。

{
  var a = 1;
}

a // 1

6 条件语句

i f 结构

var x = 1;
var y = 2;
if (x = y) {
  console.log(x);
}
// "2"

上面代码的原意是,当x等于y的时候,才执行相关语句。但是,不小心将严格相等运算符写成赋值表达式,结果变成了将y赋值给变量x,再判断变量x的值(等于2)的布尔值(结果为true)。

这种错误可以正常生成一个布尔值,因而不会报错。为了避免这种情况,有些开发者习惯将常量写在运算符的左边,这样的话,一旦不小心将相等运算符写成赋值运算符,就会报错,因为常量不能被赋值。

if (x = 2) { // 不报错
if (2 = x) { // 报错     Invalid left-hand side in assignment

if…else 结构

else代码块总是与离自己最近的那个if语句配对。

var m = 1;
var n = 2;

if (m !== 1)
if (n === 2) console.log('hello');
else console.log('world');

相当于

if (m !== 1) {
  if (n === 2) {
    console.log('hello');	
  } else {
    console.log('world');
  }
}

如果想让else代码块跟随最上面的那个if语句,就要改变大括号的位置。换成传统的if--else,规矩点!!!

switch结构

var x = 1;
switch (x) {
  case true:
    console.log('x 发生类型转换');
  default:
    console.log('x 没有发生类型转换');
}
// x 没有发生类型转换
switch语句内部采用的是“严格相等运算符”,不进行类型转换

7 循环语句

for                           while                      do...whiile                 都很简单

break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。

break语句用于跳出代码块或循环。continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环

语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下。

top:
  for (var i = 0; i < 3; i++){
    for (var 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

continue语句也可以与标签配合使用。

top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) continue top;
      console.log('i=' + i + ', j=' + j);
    }
  }
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
// i=2, j=0
// i=2, j=1
// i=2, j=2

当跳到1,1的时候此时i=1,j=1,就跳到最外层的循环哪里去了,i=2,j=0;

猜你喜欢

转载自blog.csdn.net/zteenmozart/article/details/80658517