JS的优秀之处并非原创,它的原创之处并不优秀。 ——Brendan Eich,JS之父,对早期JS的评价
表达式、语句、标识符
表达式
1+2表达式的值为3
add(1, 2) 表达式的值为函数的返回值
console.log 返回的是函数本身
console.log(3)返回的值是undefined,打印出来的是3
语句
var a = 1 是一个语句
两者区别
表达式一般都有值,语句可能有也可能没有
语句一般会改变环境(声明、赋值)
上面两句话并不绝对
注意!return后面不能加回车
标识符
- 变量命名规则:第一个字符,可以是Unicode字母或$或_或中文。后面的字符,除了上面所说,还可以有数字。
- 变量名是标识符
//起手写单行注释,/**/起手写多行注释- 好的注释:踩坑注解;为什么代码会写的这么奇怪,遇到了什么bug
- 区块Block:
{ }内写多行代码,常与if/for/while合用
if语句
语法
if(表达式){语句1}else{语句2}, {}在语句只有一句时可以省略,但不建议这样做。
最推荐使用的写法
if (表达式) {
语句
} else if (表达式){
语句
} else {
语句
}
switch语句
语法
模仿了C语言特性
switch (表达式) {
case a:
// ...
case b:
// ...
break;
default:
// ...
}
注意: break多数情况下都要添加。
三元表达式
语法
这是最简单的if ... else ...写法
表达式1 ? 表达式2:表达式3
短路逻辑
-
A && B && C && D该语句会取第一个假值或最后一个表达式的值,并不会取true或false。
举例:console && console.log && console.log('hi'),因为早期IE浏览器没有console,所以在早期IE浏览器上该表达式会取第一个表达式的假值。 -
A || B || C || D取第一个真值或D,并不会去true或false。 举例:a = a || 100如果a存在则不动;如果a不存在,则给a赋值100。起到一个保底值的作用
while循环
语法: while (表达式) {语句}
do...while可以保证循环至少执行一次。一般用得不多。
变态题:下面这个是死循环吗?
var a = 0.1
while (a !== 1){
console.log(a);
a = a + 0.1;
}
Answer is yes. 因为浮点数会丢精度,无法精确取到1.
for循环
同C语言语法相同: for(语句1; 表达式; 语句2) {循环体}
for是while循环的方便写法,aka语法糖。
变态题:下面这个代码会怎么输出?
for(var i = 0; i < 5; i++){
setTimeout(() => { console.log(i); })
}
Answer is 5个5. setTimeout会使console延时输出,所以循环会先走完,i的值为5,再输出5个5.
break和continue
break退出当前所在循环。循环嵌套时,只会退出当前循环
continue跳过这次所在循环
label标签
(用的比较少,面试可能会问到)
js语言允许语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置。
标签的格式如下:
label:
语句
更多内容可以看阮一峰的入门教程