JS基本语法

表达式与语句

表达式(expression),指一个为了得到返回值的计算式。

1 + 2 表达式的为3

add(1 + 2) 表达式的值为函数的返回值

console.log 表达式的值为函数本身

console.log(3) 表达式的值为undefined

语句(statement),是为了完成某种任务而进行的操作,例如赋值语句var a = 1 + 3;

var a = 1 是一个语句

var a = 1 + 3

var b = ‘abc’

二者区别

表达式一般都有值,语句可能有也可能没有

语句一般不会改变环境(声明、赋值)

以上并不绝对

语句主要为了进行某种操作,一般情况下不需要返回值;表达式则是为了得到返回值,一定会返回一个值。凡是 JavaScript 语言中预期为值的地方,都可以使用表达式。比如,赋值语句的等号右边,预期是一个值,因此可以放置各种表达式。

表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。


标识符

指的是用来识别各种值的合法名称,最常见的标识符就是变量名,以及函数名。

JavaScript 语言的标识符对大小写敏感,所以aA是两个不同的标识符。

命名规则:

  • 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
  • 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9

JavaScript 有一些保留字,不能用作标识符: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。


if else

if结构先判断一个表达式的布尔值(true or false),然后根据布尔值的真伪,执行不同的语句。

1
2
3
4
5
6
7
8
if (表达式) {
// 语句
}else if (表达式){
// 语句
}else if (表达式){
// 语句
}else {
}

switch

多个 if ...else 连在一起使用的时候,可以转为是使用 switch 结构。

1
2
3
4
5
6
7
8
9
10
11
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:"nothing"
// ...
}
// switch 语句部分和 case 语句部分,都可以使用表达式。

三元运算符

1
2
3
4
5
6
(条件) ? 表达式1 : 表达式2

var even = (n % 2 === 0) ? true : false;
// 如果n可以被2整除,则even等于true,否则等于false

var msg = '数字' + n + '是' + (n % 2 === 0 ? '偶数' : '奇数');

逻辑运算符

逻辑与运算(&&)是 AND 布尔操作。只有两个操作数都为 true 时,才返回 true,否则返回 false。具体描述如表所示。

第一个操作数 第二个操作数 运算结果
true true true
true false false
false true false
false false false

逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式。运算逻辑如下:

  • 第 1 步:计算第一个操作数(左侧表达式)的值。
  • 第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、””、false),那么就会结束运算,直接返回第一个操作数的值
  • 第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
  • 第 4 步:返回第二个操作数的值。
1
2
3
4
console.log(typeof ({} && true));  //返回第二个操作数的值  true的类型:布尔型
console.log(typeof (true && {})); //返回第二个操作数的值 {}的类型:对象
console && console.log && console.log(hi) // 返回 hi
fn && fn() // 常见写法 如果fn存在调用fn()

**辑或运**算`||`是布尔 OR 操作。如果两个操作数都为 true,或者其中一个为 true,就返回 true,否则就返回 false。
1
2
3
4
5
6
7
a = a || 100
// 等价于
if (a) {
a = a
} else {
a = 100 // 保底值
}

while

While 语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。

1
2
3
while (条件) {
语句;
}
1
2
3
4
5
6
7
// 例 死循环
var a = 0.1;
while (a !== 1) {
cconsole.log(a);
a = a + 0.1;
}
// 因为浮点数不精确

for

1
2
3
4
5
6
7
for (初始化表达式; 条件; 递增表达式) {
语句
}
先执行 初始化表达式
然后判断 条件
如果为 真,执行循环体,然后执行 递增表达式
如果为 假,直接退出循环。
1
2
3
4
5
6
7
// 例
for(var i = 0; i<5; i++) {
setTimeout(()=> {
console.log(i + '随机数:' + Math.random());
}, 0);
}// 输出5个5

参考


for in

for/in 语句是 for 语句的一种特殊形式。参考

1
2
3
4
5
6
7
for ( [var] variable in <object | array){
statement
}
/* variable 表示一个变量,可以在其前面附加 var 语句,用来直接声明变量名。in 后面是一个对象或数组类型的表达式。在遍历对象或数组过程中,把或取的每一个值赋值给 variable。

然后执行 statement 语句,其中可以访问 variable 来读取每个对象属性或数组元素的值。执行完毕,返回继续枚举下一个元素,以此类推知道所有元素都被枚举为止。
对于数组来说,值是数组元素的下标;对于对象来说,值是对象的属性名或方法名。*/
1
2
3
4
5
// 使用 for/in 语句遍历数组,并枚举每个元素及其值。
var a = [1,true,"0",[false],{}];
for (var n in a) {
document.write("a["+n+"] = " + a[n] + "<br>");
}

break 和 continue

break 语句能够结束当前 for、for/in、while、do/while 或者 switch语句的执行。

continue 语句用在循环结构内,用于跳过本次循环,继续执行下一次循环。


label

标签

1
2
3
4
5
6
7
8
9
10
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);

// m 一个标签,内容为1
{foo:1}

参考自网道 JavaScript教程