ES 6之前的版本都是垃圾,ES 6为了兼容之前的版本所以带有一半垃圾
ES 2019与ES 6 差别不大
下面讲的都是ES 6版本
表达式和语句
- 1+2表达式的值是3
- add(1,2)表达式的值是函数的返回值
- console.log(3)的值是Undefined,因为返回值是undefined.虽然的确会打印3
- 回车在大部分没有实际影响
- 只有一个地方不能加回车,那就是return后面, 否则会返回undefiend
规则如下:
- 第一个字符,可以是任意Unicode字母(包括英文字母、希腊字母、中文)、下划线、$符。
不可以是数字开头 - 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9
- 语法和其他语言一样
- 注释不是越多越好
- 因为什么业务场景所以代码会写的这么奇怪,这可以写注释
- 踩过的坑,遇到的bug可以写注释
缩进可以非常变态,面试题故意省略花括号:
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
推荐阅读
- JS中的for...in和for...of循环语句有什么区别
- VUE|vue项目中 localStorage 的用法建议
- Vite|Vite使用.env文件
- javascript|客观评价 增长趋势比 vite 还猛的 TailwindCSS
- 前端|新提案,初识CSS的object-view-box属性
- 前端|注意避坑,Vue Router 4: 路由参数在 created/setup 时不可用
- 前端|停止像这样使用 “async/await“,改用原版
- 微信小程序|微信小程序学习之旅--第一个页面的制作
- Jquery|4.jquery(函数)