JavaScript表达式和语句
表达式
- 1+2 表达式的值为3
- add(1,2) 表达式的值为函数的返回值
- console.log 表达式的值为函数本身
- console.log(3) 表达式的值为undefined
语句
- let a = 1 是一个语句
二者的区别
- 表达式一般都有值,语句可能有也可能没有
- 语句一般会改变环境(声明,赋值)
- 上面俩句话并不是绝对的
大小写敏感
- let a 和 let A 是不同的
- object 和 Object 是不同的
- function 和 Function 是不同的
空格
- let a=1 和 let a = 1 没有区别
- 加回车一般不会影响
- 只有return后面不能加回车
标识符
规则
- 第一个字符,可以是Unicode字母或($,_,中文)
- 首字母外可使用数字
变量名是标识符
- let _ = 1
- let $ = 2
- let ______ = 3
- let 你好 = 4
- let 你好2 = 5
注释
- 注释一行使用//
- 注释一段使用/代码块/
//我这一行被注释了
/*
我这一段
代码被注释了
*/
代码块
- 把代码包在一块
{
let a = 1
let b = 2
}
- 常与 if\for\while 合用
if语句
语法
- if(表达式){语句1}else{语句2},如果if接的表达式成立,则执行语句1,否则执行语句2
- {}在语句只有一句时可以省略
变态情况
- a = 1
if(a = 1){
console.log('a是1')
}else{
console.log('a不是1')
}
a = 1的意思为将a赋值为1,结果就是1,所以输出a是1 解决1:将=换成===,解决2:将常量放在左边,如1 = a,则会直接报错
- 缩进常见面试套路
let a = 1
if(a === 2)
console.log("a")
console.log("b")
实际会输出"b",因为省略{}时,if的代码执行只到后面的第一行
推荐语法
if(表达式){
语句
}else if(表达式){
语句
}else{
语句
}
次推荐语法,因为return后就不再执行后续代码
function(){
if(表达式){
return 表达式
}
if(表达式){
return 表达式
}
}
switch语句,if..else..的升级版
语法
let a = 1
switch(a){
case '1':
// ...
break
case '2':
// ...
break
default:
// ...
}
- break一定要加上,少部分时候可以利用break
let a = 1
switch(a){
case '1':
case '3':
console.log('单数')
break
case '2':
case '4':
console.log('双数')
break
}
//输出为单数
问号冒号表达式(表达式1?表达式2:表达式3)最简单的if...else...写法
function max(a,b){
if(a>b){
return a
}else{
return b
}
}
//改成问号冒号表达式写法
function max(a,b){
return a>b?a:b
}
&&短路逻辑,也是用来代替if...else...
- a && b && c && d 取第一个假值,或者d
- 并不会取true/false
if(window.fn){
console.log('fn存在')
}
//改成&&写法
window.fn && console.log('fn存在')
&&短路逻辑,也是用来代替if...else...
- a || b || c || d 取第一个真值,或者d
- 并不会取true/false
//用于判断一个变量是否存在
if(a){
a = a
}else{
a = 100 //保底值
}
//改成||写法
a = a || 100
while循环
语法
- while(表达式){语句}
let i = 0
while(i<10){
console.log(i)
i = i + 1
}
- 判断表达式的真假
- 当表达式为真,执行语句,执行完再次判断表达式的真假
- 当表达式为假,执行后面的语句
- while(true){}会造成死循环
- 面试题套路
let a = 0.1
while(a !== 1){
console.log(a)
a = a + 0.1
}
//会造成死循环,因为浮点数不精确
for循环,while循环的语法糖
语法
for(var i = 0;i < 10;i++){
console.log(i)
}
- 先执行let i = 0
- 然后判断i < 10
- 如果为真,执行console.log(i),然后执行i++
- 如果为假,直接退出循环,执行后面的代码
- 最后i为10
- 面试题套路
for(var i = 0;i < 10;i++){
setTimeout(console.log(i),0)
}
//输出10个10
//想要输出0--9,var改成let即可
//初始化可写在外面
var i = 0
for(;i < 10;i++){
setTimeout(console.log(i),0)
}
break和continue
//break只会退出最近的for循环
for(let i=0;i<10;i++){
if(i===5){
break
}
}
//continue会跳过一次循环,结果为只输出偶数
for(let i=0;i<10;i++){
if(i%2===1){
continue
}
console.log(i)
}
label语句
{
a:1
}
foo:{
console.log(1)
break foo
console.log(2)
}
//这个不是对象,是一个代码块,a是一个标签,里面是1
推荐书籍
- 阮一峰的免费教程
- 你不知道的javasc上卷