表达式和语句
表达式
1+2表达式的值为3
add(1,2)表达式的值为函数的返回值
console.log表达式的值为函数本身
console.log(3)表达式的值为多少?
如下图:
函数本身f log(){[native code]}.
console.log(3)打印3,值为undefined.
语句
let a = 1 是一个语句
二者的区别
表达式一般都有值,语句可能有也可能没有值。
语句一般会改变环境(声明、赋值)
而上述两句话并不是绝对的。
大小写区分
- 不要混淆
var a和var A是不同的
object和Object是不同的
function和Function是不同的
具体含义学到数据类型再说
空格
- 大部分空格没有实际意义
var a = 1和var a=1没有区别
加回车大部分时候也不影响
只有一个地方不能加回车,那就是return后面 如下图:
会自动在 return 后加上 undefined.
这是JS原创之处,并不优秀。
标识符
-
规则 第一个字符,可以使Unicode字母或者$或_或中文。
后面的字符,除了上述字符,还可以跟数字。 -
变量名是标识符
var _ = 1
var $ = 2
var ______ = 6
var 你好 = 'hello'
- 其他标识符用到可查MDN
注释
注释的分类
- 不好的注释
把代码翻译为中文
过时的注释
发泄情绪的注释 - 好的注释
踩坑的经验注释
解释遇到bug的注释
区块block
- 把代码包在一起
{
let a = 1
let b = 1
}
- 常常与
if/for/while一起使用
if语句
-
语法 if(表达式){语句1}else{语句2}
{}在语句只有一句的时候可以省略,但不建议省略 -
变态情况 表达式里可以非常变态,如 a = 1
语句1里可以非常变态,如嵌套的if else
语句1里可以非常变态,如嵌套的if else
缩进也可以变态,如面试题尝尝下套
a = 1
if(a === 2)
console.log('a')
console.log('a等于2')
变态省略,if语句只管到第一行,不满足条件不打印a.
第二行是if语句之外的语句,打印'a等于2',语句的值为undefined.所以运行结果如上图。
故使用最没有歧义的写法(程序员戒律)
最推荐使用的写法
if(表达式){
语句
}else if(表达式){
语句
}else{
语句
}
次推荐使用的写法
function fn(){
if(表达式){
return 表达式
}
if(表达式){
return 表达式
}
return 表达式
}
switch语句
- 语法
switch(fruit){
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
- break
大部分时候,不能省略break.
少部分时候,可以利用break. 如下图运算:
问号冒号表达式
- 表达式1?表达式2:表达式3
当
if语句只有一个语句,else语句也只有一个语句的时候,代替if/else语句达到简化使用的目的。
&&短路逻辑
A && B && C && D取第一个假值A或D,并不会取true/false
||短路逻辑
A|| B || C || D取第一个真值A或D,并不会取true/false 原理和上图相似。
while循环
- 语法
while(表达式){语句}
判断表达式的真假
当表达式为真,执行语句,执行完再判断表达式的真假
当表达式为假,执行后面的语句 - 其他
do...while用的不对,可自行查看文档了解
for循环
- 语法糖
for是while循环的方便写法
方便在哪? - 语法
for(语句1;表达式2;语句3){
循环体
}
先执行语句1(只执行1次)
然后判断表达式2
如果为真,执行循环体,然后执行语句3,再判断表达式2
如果为假,直接退出循环,执行后面的语句。
break和continue
- 退出当前{}所有循环 V.S.退出当前一次循环
label语句
用的很少,常用于面试题
- 语法
foo:{
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
- 面试题
{
foo: 1;
}
是个代码块,有个foo标签,内容是1。而不是对象。
推荐书籍
阮一峰的免费教程:入门篇
你不知道的JavaScript