JS基本语法

340 阅读4分钟

表达式与语句

表达式

  • 1+2表达式的值为3
  • add(1,2)表达式的值为函数的返回值。只有函数有返回值。
  • console.log表达式的值为函数本身
  • console.log(3)表达式的值为多少

语句

  • var a = 1是一个语句

二者的区别

  • 表达式一般都有值,语句可能有也可能没有
  • 语句一般会改变环境(声明、赋值)
  • 上面两句话不是绝对的

大小写敏感,不要写错

  • var a和var A是不同的
  • object和Object是不同的
  • function和Function是不同的

空格

  • 大部分空格没有实际意义
  • 加回车大部分时候也不影响
  • 只有一个地方不能加回车,那就是return后面

标识符

规则

  • 首字符可以是Unicode字母或$或_或中文
  • 后面的字符除了以上,还可以有数字
  • 标识符=取名字

变量名是标识符

  • var_ = 1
  • var$ = 2
  • var___ = 6
  • var你好 = 'hi'

注释

好的注释

  • 踩坑注解
  • 为什么代码会写的这么奇怪,遇到的bug

不好的注释

  • 把代码翻译成中文
  • 过时的注释
  • 发泄不满的注释

区块block

  • 把代码包在一起
{
let a = 1
let b = 2
}
  • 常常与if/for/while合用

条件语句

1. if 语句 如果...那么...

语法

  • if(表达式){语句1} else {语句2}

  • {}在语句只有一句的时候可以省略,不建议这么做

变态情况

  • 表达式里可以非常变态,如a=1
a = 2
if (a === 1){
console.log('a是1')
}else{
console.log('a不是1')
}

注意:“=”在js里是赋值,“===”才是等于 用webstorm而不是vscode帮我们规范代码。

  • 语句1里可以非常变态,如嵌套的if else ,花括号也可以省略
if(a < 100){

}else if(a > 10000){
console.log('a大于10000')
}else{
}
  • 语句2里可以非常变态,如嵌套的if else,花括号也可以省略

  • 缩进也可以很变态,如面试题常常下套

a = 1
if(a === 2)
  console.log('a')
  console.log('a等于2')

程序员戒律2:请永远使用最没有歧义的写法

戒律1:程序员不能相信人类,包括你自己。所有人类会做的事情都会出错。

最推荐使用的写法,万无一失

if (表达式) {
 语句
} else if(表达式){
 语句
} else{
 语句
}

次推荐使用的写法

function fn(){
if(表达式){
return 表达式
}
if(表达式){
return 表达式
}
return 表达式
}

2. switch语句 if...else...升级版

不推荐易出错,但需要了解

语法

swith (fruit) {
case "banana":
//...
break;
case "apple":
//...
break;
default:
//...
}

break

  • 大部分时候,省略break你就完了
  • 少部分时候,可以利用break

举例:苹果公司新设计的Swift语言switch语句就不需要用break

3. 问号冒号表达式

表达式1?表达式2:表达式3

?表如果 :表否则

function max(a,b){
if(a>b)return a;
else returm b;
}

对比

function max(a,b){
return a>b ? a: b
}

实际就是最简单的if else 写法。简化那些if里面只有一个语句else里面也只有一个语句的情况。

再举例: 求数字绝对值

function abs(n){
return n>0 ? n: -n
}

4. &&短路逻辑

A&&B&&C&&D取第一个假值或D,一般不会取ture/false

也是用来代替if...else

!xx = 非xx

5. ||短路逻辑

A||B||C||D取第一个真值或D,一般不会取ture/false

循环

1. while

语法

  • while(){}
  • 判断表达式的真假
  • 当表达式为真,执行语句,执行完再判断表达式的真假
  • 当表达式为假,执行后面的语句
var i = 0
while(i<10){
console.log(i)
i = i+1
}

再举例 死循环

var a = 0.1 // 初始化
while(a  !==1){ // 判断
console.log(a)  // 循环体
a = a + 0.1   // 自增
}

浮点数不精确造成的问题

其他

  • do...while用的不多,自行了解

2. for循环

语法糖

  • for是while循环的升级版,方便写法
  • 方便在哪?避免容易陷入死循环

语法

  • for(语句1-初始化;表达式2-判断;语句3-自增){
  • 循环体
  • }
  • 先执行语句1
  • 然后判断表达式2
  • 如果为真,执行循环体,然后再执行语句3
  • 如果为假,直接退出循环
for(var i = 0;i<5;i++){
console.log(i)
}

执行完以后i=5

变态版:

for(var i = 0;i<5;i++){
setTimeout(()=>{
console.log(i)
})
}

setTimeout 含义是过一会儿执行

for let 有单独的逻辑

3. break和continue

退出当前所有循环VS退出当前一次循环

for(var i=0;i < 10;i++){
if(i%2===1){    //i除以2的余数等于1
break
}
}

i=1 break对离它最近的for有用

for(var i=0;i < 10;i++){
if(i%2===1){    //i除以2的余数等于1
continue
}else{
console.log(1)
}
}

i=0,12,4,6,8

label 语句

语法

foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);

面试

{
 foo: 1
}

直接写个花括号,里面是a:1是什么意思?a是label,语句就是1

推荐书籍