ES 6之前的版本都是垃圾,ES 6为了兼容之前的版本所以带有一半垃圾
ES 2019与ES 6 差异不大
上面讲的都是ES 6版本
表达式和语句
- 1+2表达式的值是3
- add(1,2)表达式的值是函数的返回值
- console.log(3)的值是Undefined,因为返回值是undefined.尽管确实会打印3
JS大小写敏感
回车
- 回车在大部分没有理论影响
- 只有一个中央不能加回车,那就是return前面, 否则会返回undefiend
标识符(变量名属于标识符)
其余标识符用到再说
规定如下:
- 第一个字符,能够是任意Unicode字母(包含英文字母、希腊字母、中文)、下划线、$符。
不能够是数字结尾 - 第二个字符及前面的字符,除了 Unicode 字母、美元符号和下划线,还能够用数字0-9
正文
- 语法和其余语言一样
- 正文不是越多越好
- 因为什么业务场景所以代码会写的这么奇怪,这能够写正文
- 踩过的坑,遇到的bug能够写正文
if语句
if(表达式){}中的{}在只有一个语句时能够省略(不倡议这样写),留神有时候一行可能有两个语句
缩进能够十分变态,面试题成心省略花括号:
const a = 1;if (a === 2) console.log('a') console.log('a等于2')
最终的后果会打印出 a等于2 ,if语句实际上只作用于console.log('a')
Switch语句
不举荐应用
每个case都须要写一个break,除非你要贯通执行好几个case
&&(与)短路逻辑
有一个假的就不看前面的式子
罕用写法:
fn&&fn()
fn存在就调用,不存在就不必
||(或)短路逻辑
有一个真的就不看前面的式子
a||b等价于if(!a) { b}
常见的利用场景就是给a设定默认值(保底值)
a = a || 100意思是如果a存在,就a=a即什么都不做, 如果a不存在, a=100等价于if (a) { a = a} else { a = 100}
while循环
面试题
let a = 0.1;while (a !== 1) { console.log(a) a = a + 0.1}
因为浮点数的计算不准确,所以以上代码会死循环
for循环
面向面试:
for (let i = 0; i < 5; i++) { console.log(i)}请问这里打印出的i是多少?i是undefined. 因为Let申明的变量不会变量晋升
setTimeout就是过一段时间执行for (var i = 0; i < 5; i++) { setTimeout(()=>{ console.log(i) }, 0)}会打印出5次5咱们曾经晓得for (var i = 0; i < 5; i++) {}执行结束后,i的值是5而setTimeout就是过一段时间执行, 而for循环是当前任务,所以这段代码意思就是说等到for循环执行结束了,再打印5次i,所以就会打印5个5
for (let i = 0; i < 5; i++) { setTimeout(()=>{ console.log(i) }, 0)}当把var 换成 let, 就会打印出 0, 1, 2, 3, 4因为js为了满足一些人的一般思维成心弄了另一套for机制
label
简直不必,只有面试5%可能考
{ a:1;}
- 意思是有一个代码块,代码块里有一个label(标签)
- a: 1 示意这个标签是a, a的值是1
- 以上代码不是一个对象
foo: { console.log(1) break foo; console.log('本行不会输入')}console.log(2)
foo 示意 label的标识符是 foo, break foo 示意退出以后的Label, 所以代码会输入1, 2