关于javascript:js学习笔记2基本语法

3次阅读

共计 2137 个字符,预计需要花费 6 分钟才能阅读完成。

变量

常见谬误类型
  • 仅申明变量而没有赋值:undefined(无定义)
var a;
a // undefined
  • 变量未声明就间接应用:not defined(没有申明)
x
// ReferenceError: x is not defined
变量晋升法令

js 引擎的工作形式:先解析代码,获取所有被申明的变量,而后再一行一行地运行。这造成的后果,就是所有的变量的申明语句,都会被晋升到代码的头部,这就叫做变量晋升(hoisting)。

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

这里 a 还没有申明和赋值,本应该是谬误的,然而后果没有报错,而是显示 undefined。

这是因为存在变量晋升,将变量申明提到了前边,理论运行的是下边代码

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

这里值得注意的是,提到前边的仅有变量申明,变量赋值不提到前边,所以后果是 undefined

标识符(变量名 + 函数名)命名规定

  • 第一个字符,能够是任意 Unicode 字母(包含英文字母和汉语等其余语言的字母),以及美元符号($)和下划线(_)。
  • 第二个字符及前面的字符,除了 Unicode 字母、美元符号和下划线,还能够用数字0-9
  • 一些保留字不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

非法标识符

arg0
_tmp
$elem
π
长期变量

非法标识符

1a  // 第一个字符不能是数字
23  // 同上
***  // 标识符不能蕴含星号
a+b  // 标识符不能蕴含加号
-d  // 标识符不能蕴含减号或连词线

条件语句

if…else 语句
  • if前面的表达式之中,不要混同赋值表达式(=)、严格相等运算符(===)和相等运算符(==)。尤其是赋值表达式不具备比拟作用。
var x = 1;
var y = 2;
if (x = y) {console.log(x);
}
// "2"

上边不小心将严格相等运算符写成赋值表达式,后果变成了将 y 赋值给变量 x,再判断变量x 的值(等于 2)的布尔值(后果为true)。这种谬误能够失常生成一个布尔值,因此不会报错。

为了防止这种状况,有些开发者习惯将常量写在运算符的右边,这样的话,一旦不小心将相等运算符写成赋值运算符,就会报错,因为常量不能被赋值。

if (x = 2) { // 不报错
if (2 = x) {// 报错
  • 为什么优先采纳“严格相等运算符”(===),而不是“相等运算符”(==),请参考《运算符》章节。
switch 语句

多个 if...else 连在一起应用的时候,能够转为应用更不便的 switch 构造。

  • 须要留神的是,每个 case 代码块外部的 break 语句不能少,否则会接下去执行下一个 case 代码块,而不是跳出 switch 构造。
var x = 1;

switch (x) {
  case 1:
    console.log('x 等于 1');
  case 2:
    console.log('x 等于 2');
  default:
    console.log('x 等于其余值');
}
// x 等于 1
// x 等于 2
// x 等于其余值

谬误语句

switch (x) {
  case 1:
    console.log('x 等于 1');
    break;
  case 2:
    console.log('x 等于 2');
    break;
  default:
    console.log('x 等于其余值');
}

正确写法

  • 须要留神的是,switch语句前面的表达式,与 case 语句前面的示意式比拟运行后果时,采纳的是严格相等运算符(===),而不是相等运算符(==),这意味着比拟时不会产生类型转换。
var x = 1;

switch (x) {
  case true:
    console.log('x 产生类型转换');
    break;
  default:
    console.log('x 没有产生类型转换');
}
// x 没有产生类型转换

循环语句

do…while 循环

循环至多运行一次,这是这种构造最大的特点

标签(label)

js 语言容许语句的后面有标签(label),相当于定位符,用于跳转到程序的任意地位。通常与 break 语句和 continue 语句配合应用,跳出特定的循环

标签格局

label:
  语句
foo: {console.log(1);
  break foo;
  console.log('本行不会输入');
}
console.log(2);
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
正文完
 0