JavaScript词法:为什么12.toString会报错?
winter
该思维导图由 AI 生成,仅供参考
你好,我是 winter。
在前面的文章中,我们已经从运行时的角度了解过 JavaScript 的知识内容,在接下来的几节课,我们来了解一下 JavaScript 的文法部分。
文法是编译原理中对语言的写法的一种规定,一般来说,文法分成词法和语法两种。
词法规定了语言的最小语义单元:token,可以翻译成“标记”或者“词”,在我的专栏文章中,我统一把 token 翻译成词。
从字符到词的整个过程是没有结构的,只要符合词的规则,就构成词,一般来说,词法设计不会包含冲突。词法分析技术上可以使用状态机或者正则表达式来进行,我们的课程主要是学习词法,关于它们实现的细节就不多谈了。
概述
我们先来看一看 JavaScript 的词法定义。JavaScript 源代码中的输入可以这样分类:
WhiteSpace 空白字符
LineTerminator 换行符
Comment 注释
Token 词
IdentifierName 标识符名称,典型案例是我们使用的变量名,注意这里关键字也包含在内了。
Punctuator 符号,我们使用的运算符和大括号等符号。
NumericLiteral 数字直接量,就是我们写的数字。
StringLiteral 字符串直接量,就是我们用单引号或者双引号引起来的直接量。
Template 字符串模板,用反引号` 括起来的直接量。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
JavaScript词法规定了语言的最小语义单元,包括空白字符、换行符、注释、词、标识符名称、符号、数字直接量、字符串直接量和字符串模板。本文详细介绍了JavaScript中的数字直接量、字符串直接量、正则表达式直接量和字符串模板,以及它们的特殊处理方式。其中,数字直接量支持多种写法,包括科学计数法和特定进制的整数表示;字符串直接量支持单引号和双引号两种写法,以及多种转义形式;正则表达式直接量由Body和Flags两部分组成,具有自己的语法规则;字符串模板在词法分析过程中被拆分成模板头、模板中段和模板尾,还支持添加处理函数的写法。总的来说,JavaScript的词法分析过程相对复杂,需要特别处理除了token之外的输入,同时换行符和注释还会影响语法分析过程。本文内容涵盖了JavaScript词法的基本概念和特殊处理方式,对于想要深入了解JavaScript词法的读者来说,是一份很好的参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《重学前端》,新⼈⾸单¥59
《重学前端》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(33)
- 最新
- 精选
- Nandy十进制的number的小数点前后的内容可以省略,但是不能同时省略 .01 = 0.01 10. = 10 12.toString() 12.被当做了一个整体,所以会报错, 加入空格 12 .toString() 这样.就成为了一个单独的token 嘻嘻~请winter老师表扬我学的认真(#^.^#)
作者回复: 对 表扬。
2019-07-25411 - lsy'敏\u200d感词'.length === 4 // true
作者回复: 别干坏事啊
2019-07-10211 - 大海为什么parseInt(12).toString()就不会报错呢,parseInt(12)返回的不也是一个数值吗
作者回复: 感觉白讲了......
2019-06-19101 - 🐻🔫🐸为啥不支持直接回复呢? 这里讨论一下@Snow同学的问题 别忘了JS是允许直接写小数的,也就说12.toString() 他无法分辨你是想要创建一个小数位为toString()的数 还是创建一个12 然后调用toString()这种情况。也就说 JS里面的. 是拥有两种含义的 一种是小数点 一种是方法调用。 你可以试试12..toString() 这样就可以消除这种歧义2019-03-24154
- 曾侃之前没有接触过零宽字符,学完这节课后网上搜了下零宽字符的应用,看到了这篇文章《[翻译]小心你复制的内容:使用零宽字符将用户名不可见的插入文本中》,受益匪浅。自己用这个思路实现了一样的给字符串添加水印的功能。 代码地址:https://github.com/zengkan0703/text-watermark,有不对的地方请同学们指正。2019-04-10243
- 田野的嘴好冰零宽空格 var a = '\uFEFF',b = 'b', c = 'c', d = (b+a+c); console.log(d); //bc console.log(d.length); //3 console.log(d.indexOf(a)); //12019-03-26242
- 是零壹呀12.toString() 会被解析成 12.(数字字面量) 和 toString()。 所以正常的写法是12..toString()才是正常的2019-04-2420
- 王益(12).toString()也可以2020-03-31115
- Yully原来零宽空格和零宽连接符、零宽非连接符还有妙用, 隐形水印、加密信息分享和逃脱关键词匹配。2020-05-0612
- CaveShaojs 中 . 有两种含义,一种是代表一个小数,一种是调用方法。12.toString() 中的 12. 会被浏览器解析为一个省略了小数后面部分的数字。一个数字后面直接写一个方法,就像 333toString 一样,肯定会报错。 Invalid or unexpected token2019-05-205
收起评论