JS语法

338 阅读5分钟

参考文献

JavaScript 的基本语法

对JS的态度

  • JS问题很多, 取其精华, 去其糟粕
  • JS是世界上使用最广的语言, JS是门槛极低的语言
  • JS是有三座高山

表达式&语句

语句

  • var a = 1 是一个语句
  • JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。

表达式

表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。

1 + 3;
'abc';
//两行语句只是单纯地产生一个值,并没有任何实际的意义。
  • 1+2 表达式的为3
  • add(1,2) 表达式的值为 函数的返回值
  • console.log 表达式的值为函数本身
  • console.log(3) 表达式的值是

两者的区别是

  1. 表达式 一般都有值 | 语句 可能有,可能没
  2. 语句一般不会改变环境 (声明\赋值)
  3. 以上两句话都不是绝对

变量

变量是对“值”的具名引用。变量就是为“值”起名,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名。

var a = 1;
---
变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一起,实际的步骤是下面这样。
var a;
a = 1;

大小写敏感

Var a 和 var A , object 和Object 这些都是是不同的

空格 回车 不敏感

但return后面不能加回车,会变undefined

标识符

变量名是标识符

规则

数字只能第二位开始, 第一个字符可以是Unicode字母或其他,也能是中文

举例

var _=1
var$=2
var 你好 = 3 //中文是合法的标识符,可以用作变量名。
以上都是可以的

var 9$ = 1 // 这就是错的

不合法标识符

1a  // 第一个字符不能是数字
23  // 同上
***  // 标识符不能包含星号
a+b  // 标识符不能包含加号
-d  // 标识符不能包含减号或连词线

JavaScript 有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

注释 //是一行, /**/是注释多行

不好的注释

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

好的注释

  • 踩坑的注释
  • 为什么代码写的这么奇怪,遇到什么BUG

区块 block

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

if语句

语法

  • if(表达式){语句1} else {语句2}
  • {}在语句只有一句的时候, 可以省略 , 但不建议

变态情况

  • 表达式里可以非常变态, 如 a=1
  • 语句1 里可以非常变态, eg: 嵌套的if else
  • 语句2 里可以非常变态, eg: 嵌套的if else
  • 缩进也可以非常变态

eg:

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

最推荐使用的写法

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

次推荐写法

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

switch 语句 (if else 升级版,容易用错)

语法

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

break

  • 大部分时候, 省略break 会出问题
  • 少部分时候, 可以利用break

问号冒号 表达式

if里面只有一个语句, else里面也只有一个语句 的时候, 问号冒号 表达式很好用.

eg:

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

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

function abs(n){
	return n>0 ? n ; -n
} //如果n>0返回n,else 给-n

&&短路逻辑

  • A&&BC&&D 取第一个假值或D
    • 如果A是假就取A,如果B是假就取B....如果都不是假就取D
  • 并不会取 true / flase ,永远都是A\B\C\D 其中一个

eg:

if(window.f1){
 console.log('存在')
}
---可以这么写
window.f1 && console.log('存在') //如果前面的是真值,会求后面的值

A&&B 逻辑

| A&&B | 真 | 假 | |-:-|-:-|-:-| | 真 | B | B | | 假 | A | A |

  • 如果前面是假, 就看前面, 把假返回
  • 如果前面是真, 就看后面, 把后面返回

||短路逻辑

  • A||B||C||D 取第一个真值,或者D

eg:

a || b //a不是真, 执行后面的b

//等同于以下的
if(!a){
	b
}
---
a = a || 100
//等同于下面的
if(a){
	a=a
}else{
	a =100 //保底值
}

while 循环 //当...时

语法

  • while (表达式) {语句}
  • 判断表达式的真假
  • 当表达式是真, 执行语句, 执行完再判断表达式真假
  • 当表达式是假, 执行后面的语句
  • do...while
  • 当心浮点数问题

for 循环

  • for是while循环的方便写法

语法

  • for(语句1;表达式2;语句3){ 循环体 }
  • 先执行语句1,再普安但表达式2 -如果真,执行循环体,再执行语句3
  • 如果假,退出循环 , 执行后面的语句

eg

var a = 0.1 // 初始化, 声明
while (a !===1) // 判断, 表达式
{
	console.log(a) // 循环体
    a = a + 0.1// 自增
}
--- 上面可以用for写成下面
for( var a=0.1; a !==1; a=a+0.1 ){
	console.log(a)
} // var 可以写外面, 中间的判断和执行增量不写 会死循环console.log

break 和 continue

  • break 退出所在的block所有循环,或者叫最近的一个for
  • continue 退出当前一次循环

eg

for (var i = 0; i <10 , i++){
	if (i%2===1{ //单数,我就break
    break // 退出循环 
    continue// 过,下一个 ,跳过
    }
}// i%2===1 的意思是i除以2的余数,等于1,相当于单数

余数 公式

  • a mod b = c 表示 整数a除以整数b所得余数为c。
  • 7 mod 2 = 7-⌊7/2⌋*2=7-3*2=1
  • 0 mod 2 = 0-⌊0/2⌋*2=0-0*2=0

label

不太用,面试可能会考

语法

问下面的代码是什么

{
a:1 //a 是一个labbel , 语句就是1
}

eg:

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

总结

  • if...else
  • switch
  • A?B:C //常用
  • A&&B //常用
  • fn&&fn() //常用
  • A||B //A或者B
    • A=A||B //常用写法, A=A 或者B