基本概念
语句(statement)
用于改变环境,进行某种操作,一般情况下没有值。 这是一行赋值语句:
var a = 1;
其中a为变量,可以被赋值。
表达式(expression)
为了得到返回值的计算式。1+2即为一个表达式。
- 表达式一般有值,
1+1的值为2 - 只有函数才有返回值,表达式只有值。
add(1,2)是一个函数,调用表达式1+2。则add(1,2)表达式的值为函数的返回值。- console.log是一个函数表达式,值为函数本身
console.log。 console.log(3)的表达式的值为函数log(3)的返回值undefined。
大小写敏感
- 空格和回车一般情况下无实际含义,
return后除外
变量
- 变量相当于值的名字,引用该值。
- 在没有被赋值时,变量的值为
undefined。
标识符(identifier)
规则
- 第一个字符:①Unicode字母;②$;③_;④中文
- 第二个及之后的字符:①Unicode字母;②$;③_;④中文;⑥数字
举例
正确标识符:
_
___
$1
你好
π
错误标识符:
1$
*** //标识符不能包含星号
a+ //标识符不能包含加号
a- //标识符不能包含减号
注释
在重要处才写注释:
- 踩坑及解决方案
- 为什么采用这样的写法
- bug及解决方案
区块(block)
{}内为一个区块,通常与其他语法结构共用,如if,while,for,function等。
条件语句
if结构
语法为:
if(表达式){语句}else{语句}
- {}可以省略,
else if就是省略嵌套的结果。
空格无实际含义,要用逻辑判断语句结构而非缩进。
基本形式:
if(){
} else if(){
} else{
}
function (){
if (){
return
}
if (){
return
}
return
}
圆括号内为表达式,执行条件判断:
if (a===1)
{
m = m + 1;
}
switch语句
在跳出循环时,使用break,基本形式如下:
switch(a){
case "正数":
case “负数”:
break;
case “0”:
break;
}
每个break不能省略,如果没有break语句,则不会跳出switch结构。
问号冒号表达式 ?:
基本形式:
表达式1?表达式2:表达式3
用于简化if语句中if和else都只有一个的情况。
&&短路逻辑
AA&&BB&&CC&&DD //取第一个假值或D
||短路逻辑
AA||BB||CC||DD //取第一个真值或D
循环语句
while语句
基本形式:
while (条件) {
语句;
}
变态形式:
var a = 0.1
while (!a==1){
a = a + 0.1;
console.log(a)
}
由于浮点数不精确,a的值不能精确等于1,故该循环为无限循环。
for语句
基本形式
for (初始化表达式; 条件; 递增表达式) {
语句
}
执行顺序为:
初始化表达式→条件→语句→递增表达式→条件→语句→递增表达式……
一个例子
for (var i = 0; i < 5; i++) {
console.log(i);
}
执行结果为:0、1、2、3、4
for (var i = 0; i < 5; i++) {
setTimeout (() => {
console.log(i)},0) //在执行完毕循环语句后过一段时间再打出i的值,此时i的值为5,循环了5次,故有5个i,值都为5
}
}
执行结果为:5、5、5、5、5
break和continue
break:跳出当前循环,只跳出当前这层。continue:立即终止本轮循环,返回循环结构的头部,开始下一轮循环。理解为next。
标签(label)
基本格式:
label:
语句
标签通常与break语句和continue语句配合使用,跳出特定的循环。
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
该代码为一个双重循环区块,break命令后面加上了top标签(注意,top不用加引号),满足条件时,直接跳出双层循环。如果break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
- 变态形式:
{
foo: 1
}
这不是Object,其含义为:区块内有一个foo标签,内容为1。