一、数字字面量
在js中,数字017是15,018是18
为什么会这样?
js中对数字0开头的数字有特殊的解析规则,数字 017 被解析为 八进制 数字,而 018 被解析为 十进制 数字
二、零宽字符
明明打印了用户名和密码了,判断条件为啥不成立???
这里面就有零宽字符,它在页面上不显示,但是不表示它不存在,例如打印username的长度为5
原因是在代码里定义username为username: '我爱\u200D上班',
\u200D就是一个零宽字符
常见的零宽字符:
零宽字符可以用来做一些水印,不影响用户查看界面
三、使用 void 0 替代 undefined
undefined不是一个关键字,它是window对象的一个属性,这就意味着可以使用undefined作为变量名
可以看到,在全局环境中,使用undefined作为变量名定义时,获取到undefined变量仍然是undefined,这样是没有问题的
在函数中,使用undefined作为变量名是可以的,后续读取undefined时,结果就不是undefined了
这种代码就会在项目中埋下隐患,如果要获取undefined值,应该使用void 0替代undefined
四、for循环嵌套时如何退出循环
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
console.log('>>', i, j)
if (j == 3) {
break
}
}
}
当内层循环break时,外层循环还是会继续执行下去,如果想要在j的值为3时,退出整个循环,怎么处理?
- 声明一个变量来辅助处理
for (let i = 0; i < 5; i++) {
let flag = false
for (let j = 0; j < 5; j++) {
console.log('>>', i, j)
if (j == 3) {
flag = true
break
}
}
if (flag) break
}
- 使用label语句,结构清晰(推荐)
outer: for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
console.log('>>', i, j)
if (j == 3) {
break outer
}
}
}
- 假如在函数中,可以使用return退出函数,循环也会终止
function ttt() {
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
console.log('>>', i, j)
if (j == 3) {
return
}
}
}
}
ttt()
如果你觉得这篇文章对你有用,可以看看作者封装的库xtt-utils,里面封装了非常实用的js方法。如果你也是vue开发者,那更好了,除了常用的api,还有大量的基于element-ui组件库二次封装的使用方法和自定义指令等,帮你提升开发效率。不定期更新,欢迎交流~