剖析 Uncaught TypeError: Cannot read properties of undefined (reading ‘includes‘) 报错

Uncaught TypeError: Cannot read properties of undefined (reading 'includes')

用了很多年的语法,突然告诉我用不了了,很诧异,于是开始琢磨研究,又是研究 Chromium Code 又是研究 V8includes 源码最后到了 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 后边加个 ; 分号,就解决了问题,解释器也知道这个定义什么时候结束

解释器的解析我就不研究了,但是我想说的是:习惯,一个很好的习惯,即能提高代码的运行速度(编译的时候让它一下就能看懂语法,不需要做很多的判断操作),也不容易出错,以后一定要养成加 ; 的习惯,希望共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值