什么是表达式?
1 + 1 、2 + 2 、3 * 4 等这类的为表达式,值分别为2、4、12;
add(1,2)也是表达式,这个表达式的值为函数的返回值;
console.log表达式的值为函数本身;
【问】:console.log(3) 表达式的值为多少?
【答】:undefined。
如果不熟悉,就会觉得这是数字3,但实际上是undefined?
根据上面的定义“console.log表达式的值为函数本身”可知,console.log(3)的值为自己的函数,则为undefined;而数字3只是console.log(3)的返回值!!
如图:
什么是值?什么是返回值?
值就是直接由表达式得出的结果;而返回值是由函数里面把处理后的结果反馈给调用者。
所以很明显,刚刚的那个console.log(3)
的值与返回值就很容易区分了!
语句是什么?
JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。 ——-网道JavaScript
所以,像是 var a = 1
这类的就是语句了。
那么语句和表达式有什么区别?
- 前者一般没有值,后者可能有值。当然这不是判断的唯一标准,有时候两者都有值,有时候没有,这种情况相对比较少。
- 语句一般会改变环境(声明、赋值),如
var a = 1
,a就是一个环境,声明了变量a之后原本是没有值的,现在就赋值为1,这个过程就是在改变环境。同样这也不是绝对区分。 - 结尾为分号
;
的话JS就会视为一个语句,即使这一行只有分号之外什么都不写,同样还是一条语句,只不过是空的语句。 - 注意,如果一条语句后加了个逗号
,
表示这条语句没完,后面再写一些东西才是一条完整的语句,JS是这么判断的,跟语文的逗号语义没有区别。
标识符是什么?
简单来说就是给容器起个名字,这个名字就是标识符,如var a = 1
表示声明一个容器,并给该容器起名为a,值为数字1。
规则:
- 标识符大小写敏感,A与a是不一样的,如object和Object是不一样的,只有一字母大小写之差。
- 标识符只能由是Unicode字母、$、_、数字组成甚至可以是中文或其中的随机几样组成,其他无效,注意标识符第一个字符不能是数字,否则无效。
空格与回车
大部分的空格其实是没有实际意义的,如var a = 1
与var a=1
这两种没有区别,只是为了好看而已。
但注意关键字两边要有空格,不然两边没有空格接上别的字符可能就不是原来的关键字了,如vara=1
,vara是什么?JS也不知道。
大部分的回车其实也不影响,如图
三种函数其实是一样的,没有区别。但是,只有return后面是不可以回车的,不然return后面就什么都没有!如图
显然,return后就不会继续往下走了。
如何写出好的注释?
什么是不好的注释?
- 把代码翻译成中文:(程序员会看不懂代码讲什么吗?如
var a = 1 //声明一个变量a赋值为1
) - 发泄不满的注释:(首先要对人对事,个人恩怨是自己跟对方的恩怨,无关其他。代码是许多人的心血,因为个人恩怨在代码里面写了一些不好听的话结果影响产品,这是不可取的。)
- 过时的注释:(如果第一条代码写多了就很容易变成过时的注释,如
var age = 18
万一以后不是18怎么办?)
所以,好的注释应该是:
- 发现了一个bug,然后自己解决了这个bug,然后为了防止自己忘记,就写注释,内容为有什么bug以及解决的过程。
- 有时候因为某些人的需求写了个让人摸不着头脑的代码(如故意在加载页面的时候故意延迟10秒加载完成的代码,交了钱的用户才能直接跳过10秒的延迟),但可能其他的程序员不知道,就把这个需求写进注释里。
if else语句
这是判断语句,用来判断结果为真就会执行相应的代码,否则不执行。
格式为:if(表达式){语句1}else{语句2}
正常情况下应该是这样子的,如图
如果是执行多条语句,就可以用多条if...else
语句连在一起。如图
其实这个是简化写法,完整写法应该是,如图
原本是没有else if
的写法,但是后来的人发现只要里面只有一条语句时,就可以去掉花括号,不会影响什么就会变成这样,如图
根据回车在这里没有什么意义,直接简化为上面第一张图!这就是else if
的由来!
踩坑环节
因为花括号是可以去掉的,所以很容易照成歧义,如
a = 1
if(a === 2)
console.log('a')
console.log('a等于2')
//请问会打印出什么?
答案是会执行第二条 console.log('a等于2')
,如果把花括号还原应该是这样子的
a = 1
if(a === 2){
console.log('a')
}
console.log('a等于2')
所以忽略花括号很容易出现歧义,建议使用最没有歧义的写法!!!这是程序员的戒律!
最推荐的写法
if(表达式){
语句
} eles if(表达式){
语句2
} else {
语句3
}
次推荐的写法
function fn(){
if(表达式){
return 表达式
}
if(表达式){
return 表达式
}
return 表达式
}
switch 语句
该语句根据选什么就会选什么。
switch (要选择什么){
case '选项1':
//...
break;
case '选项2':
//...
break;
case '选项3':
//...
break;
default:
//都不选就选这个
break;
}
注意,这个语法不能省略 break
!如果省略 break
,否则会执行所有省略 break
的选项!
不建议使用此语法,完全可以用 if else
代替。
问号冒号表达式(三元运算符 )
语法: 条件判断 ? 表达式1 : 表达式2
判断条件为真,返回 表达式1
的值,否则返回 表达式2
的值。
这个比较常用,如果可以用这个代替 if else
语句,就直接用问号冒号表达式!如
var even;
if (n % 2 === 0) {
even = true;
} else {
even = false;
}
可以这样写
var even = (n % 2 === 0) ? true : false;
短路逻辑
学过数学都知道且(&&)和或(||)在编程里有语法可以代表着两种概念。这个十分常用,能代替 if else
就代替。
a||b
//代表或,如果a为真,直接返回a的值,且直接忽视第二个值;如果a为假,不管b是否为真,都会返回b。
a&&b
//代表且,跟或反着来的。如果a值为真,返回b的值,如果a为假,返回a的值。
常见用法为
fn && fn() //如果fn为真,就可以执行函数fn(),方便吧!
a = a || b
空值合并运算符 ‘??’
例子: 如果a ?? b
,假如anull/undefined
,那么结果就为b,反之a不为null/undefined
,结果就为a。
功能上类似与||
,而且兼容也没那么好,是最近加上来的,并且两种运算符有时候是可以相互代替。但是,??
可以分辨0、''与null/undefined
的区别,而||
分别不出来。
注意:??
禁止与||
和&&
一起使用,需要分开,否则报错。
while 循环
//语法
while(表达式){
//语句
}
//如果表达式一直判断为真,就会一直执行语句,直到判断为假的时候才会结束循环。如
var a = 0
while (a < 10){
console.log(a)
a++
}
do…while循环
do...while
用得不多,但还是要了解一下的。
do...while
和 while
循环其实差不多,区别在于 do...while
是先直接执行语句再判断条件,而 while
先判断条件才执行语句。
//语法
do {
语句
} while (条件);
//或者
do
语句
while (条件);
for 循环
for
相对 while
来说更方便。
//语法
for(语句1;表达式2;语句3){
循环体
}
执行步骤:
- 先执行语句1;
- 判断表达式2;
- 如果判断为真,执行循环体,然后执行语句3,接着就判断表达式2,一直如此反复直到判断为假,即每次执行循环体结束后,都会执行一次语句3,包括最后一次判断为假的时候没有执行循环体,也会再执行一次语句3;
- 如果判断为假,就退出循环体,执行后面道语句。
注意:
步骤三有个十分重要的细节,在判断为假的时候,最后会再执行一次语句3,之后才执行后面的语句!如图
没错,虽然最后打印出来的数字是最大是2,但是最后一次判断为假的时候因为没有执行循环体,然后再执行一次语句3,所以 i 赋值为3;
break 语句和 continue 语句
break
语句和 continue
语句都具有跳转作用,可以让代码不按既有的顺序执行。
break:直接跳出当前循环体,执行后面的语句,如图
continue:忽略当前循环,继续执行之后的循环,如图:
标签(label)
JavaScript 语言允许语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下
label:
语句
一般用来面试用的。。。。如
{
foo:1
}
//问:这是什么?
//答:这是一个label标签,这个label里面有个数字1。