Uncaught TypeError: Cannot read properties of undefined (reading 'includes')
用了很多年的语法,突然告诉我用不了了,很诧异,于是开始琢磨研究,又是研究 Chromium Code
又是研究 V8
的 includes
源码最后到了 javascript 解释器
那里
记录一下源码地址:Chromium Code Search
最终,我被自己逗乐了… 特么的
我写几行代码,看有没有人能看出来什么区别
[4,5,6].includes(5)
[4,5,6].includes(5);
const a = 5
[4,5,6].includes(a)
const a = 5;
[4,5,6].includes(a)
const a = 5
const arr = [4,5,6]
arr.includes(a)
const arr = [4,5,6]
arr.includes(5)
有没有看出问题…
没错,理解的没错,就是分号引起的,看来javascript解释器
还是不太智能啊,或者说我们平常的习惯很不好,再或者说是被惯出来的毛病
解释器执行原理:
一般链式操作的时候,希望换行的时候后边的语句是连在一起执行的
而定义的时候,又希望换行就代表这个定义完事儿了
反正就是换行的时候希望代码按照自己的想法走,有时候想想,好恐怖,真的好恐怖,光这个逻辑自己写起来会怎么样,脑袋还能转的动吗???
反正一般情况下这都是没问题的
我这里的
const a = 5
[4,5,6].includes(a)
自己看着,换行了,想的是就应该从这里截断,但是到了解释器那里,我猜测编译器那一步它没将 const a = 5 [4,5,6]
分开,导致它不是一个正常的数组,,其实在 const a = 5
后边加个 ;
分号,就解决了问题,解释器也知道这个定义什么时候结束
解释器的解析我就不研究了,但是我想说的是:习惯,一个很好的习惯,即能提高代码的运行速度(编译的时候让它一下就能看懂语法,不需要做很多的判断操作),也不容易出错,以后一定要养成加 ;
的习惯,希望共勉