什么是表达式和语句
表达式
-
表达式是一组代码的集合,它返回一个值。接下来我们来举例说明
-
1 + 2 表达式的值为 3
-
add(1, 2) 表达式的值为函数的返回值
-
console.log 表达式的值为函数本身
面试经:console.log(3) 表达式的值 为 undefined ,打印 3 ,不代表返回值。
一些栗子
问号冒号表达式(三元运算符)
- 语法:表达式1 ? 表达式2 : 表达式3
n > 0 ? n :-n
短路逻辑
- A && B && C && D 取第一个假值或 D,并不会取 true / false 。
window.f1 && console.log('f1存在') 取值为 undefined 。
|| 短路逻辑
A || B || C || D 取第一个真值或 D 。a = a || 100 这个表达式取不到值,程序会报错,因为 a 没有被创建。
语句
- 语句(statement)是为了完成某种任务而进行的操作,比如var a = 1 + 2 ; 就是一行赋值语句。
明显的区别
- 表达式一般都有值,语句可能没有;(不绝对)
- 语句一般会改变环境(声明、赋值);(不绝对)
- JS对大小写敏感,var a 和 var A 是不同的;
面试经:JS大部分回车与空格没有实际意义,唯独return后面不能加回车;
标识符的规则
- 第一个字符,可以是Unicode 字母(包括英文字母和其他语言的字母)或者$ 或者_或者中文;
- 第二个字符及后面的字符,除了Unicode 字母、美元符号和下划线,还可以用数字0-9;
- 变量名是标识符;
var _ = 1
var $ = 2
var _____ = 6 //最多两个下划线
var 你好 = 'hello'
if else 语句
if (表达式) {语句 1} else {语句 2}
备注
- 表达式可以是 a = 1
- 语句 1 和语句 2 里可以嵌套 if...else
- 不带{}时,缩进需要注意,只有第一个语句代码属于 if...else 的执行语句
最推荐的写法
if (表达式) {
语句
} else if (表达式) {
语句
} else {
语句
}
次推荐的写法
function fn() {
if (表达式) {
return 表达式
}
if (表达式) {
return 表达式
}
return 表达式
}
while for 语句
while 语句
- While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
while (条件)
语句;
// 或者
while (条件) 语句;
执行过程
- 判断表达式的真假;
- 当表达式为真,执行语句,执行完后再判断表达式的真假;
- 当表达式为假,跳出循环,执行后面的语句;
var i = 0;
while (i < 100) {
console.log('i 当前为:' + i);
i = i + 1;
}
**面经:**因为浮点数不精确,a最接近1的值是 0.99999999999 而不会 = 1,结果就是造成死循环
let a 0.1
console.log(a+0.1) // 多执行几次会发现结果和想象的不一样
while(a<1){
console.log(a)
a + 0.1 // 因为浮点数不精确,a最接近1的值是 0.99999999999 而不会 = 1,结果就是造成死循环
}
For循环
实际上 for 循环就是一个语法糖,是 while 循环的方便写法。
for(语句1;表达式2;语句3){
循环体
}
for语句后面的括号里面,有三个表达式
初始化表达式(initialize):确定循环变量的初始值,只在循环开始时执行一次。 条件表达式(test):每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。 递增表达式(increment):每轮循环的最后一个操作,通常用来递增循环变量。
所有for循环,都可以改写成while循环。
var x = 3;
var i = 0;
while (i < x) {
console.log(i);
i++;
}
对照
var x = 3;
for (var i = 0; i < x; i++) {
console.log(i);
}
// 0
// 1
// 2
- for语句的三个部分(initialize、test、increment),可以省略任何一个,也可以全部省略。(判断条件和递增表达式省略可能造成死循环)
break continue
- break:跳出整体循环(循环嵌套下,跳出的是离break最近的那个循环)
- continue: 跳出本次循环,直接进入下次循环
label
- 标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句; 标签通常与break语句和continue语句配合使用,跳出特定的循环。
面经:{foo: 1} 在浏览器中,这就是一个标签,值为 1。只有 var a = {foo: 1} 时,才是一个对象。