- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究JS词法分析器。在JS中,单行字符串从“或”开始,并以相同的字符结尾,除非该字符前面带有反斜杠。
在当前代码中,我遍历每个字符,然后根据“字符串”或“正则表达式”之类的标志将它们附加到现有标记中。所以用“或'实现多行字符串是很自然的,因为这似乎不会影响我的词法分析器的任何其他部分
有什么实际的原因为什么不允许换行作为字符串的内容?
最佳答案
许多语言(但不是全部)禁止在字符串文字中使用未转义的换行符。因此,JavaScript在这里肯定不是唯一的。
但是动机实际上与词法分析的难易程度,效率无关。实际上,对于词法分析,最简单的语法是允许任何字符,而不必包括特殊情况检查。 [注1]
但是,还有其他考虑因素。值得注意的是,程序具有可读性和易于调试的重要性。长字符串会给阅读代码的人带来额外的负担,因为他们可能不知道程序文本的一部分实际上是字符串文字的一部分。 (多行注释也存在类似的问题,这就是为什么通常认为以某种方式在长注释中标记每一行是好的样式,例如在左边缘有一个垂直的星号列。对于字符串不存在这种解决方案。字面意思。)
同样,未终止的多行字符串可能会很烦人纠正。如果字符串不能跨越行,则将在包含问题的行上检测到错误。但是多行字符串可能会一直持续到下一个字符串的开头,然后在下一个字符串的内容被意外地解析为程序文本时触发语法错误。或更糟糕的是,导致完全错误地解析了应该是程序文本的内容,随后是另一个不正确的字符串文字,该文字从第二个文字结束处开始,并从那里继续。
这也使开发人员工具(例如编辑器和语法突出显示工具)在键入程序文本时难以处理。
最后,您可能会或可能不会发现这些论点令人信服,并且语言设计师可能还会有其他审美偏好。我不能真正代表JavaScript语言的原始设计师,而且我们俩都无法及时航行与他们争论并可能改变他们的决定。
不论好坏,语言都是根据特定的主观判断设计的,如果语言成功,这些判断将成为永久性的特征。如果您使用的是语言,则必须接受这些东西,而这些东西通常不值得关注。您已经习惯了它们,或者找到了自己的语法怪异来编程的另一种语言。
当您设计自己的语言时,您将需要解决大量的句法问题,并且由于没有客观正确的独特解决方案,无疑会遇到答案不明确的情况。无论您做什么,都会有人想和您争论。也许您可以推荐他们这个答案。
笔记:
实际上,有一个历史原因不允许使用多行字符串文字,这很清楚,但几十年来一直无关紧要。
曾几何时,常见的文件系统将文本文件视为固定长度的线的线性数组(通常为80个字符的行,与Hollerith卡匹配)。这种文件系统的一个优点是,由于所有行的长度相同,因此可以立即导航到文件中的特定行号。但是无论如何,对于在打孔卡上输入程序的系统,固定长度的线只是环境的一部分。
为了使所有行的长度相同,需要用空格字符填充行。显然,这会使多行字符串文字变得笨拙,这就是为什么C从来没有允许多行字符串文字,而是依靠一种语法功能,在该语法功能中,连续的字符串文字被自动连接成单个文字。
最后,固定行长文件系统被证明是不受欢迎的,而且我认为这些天您不会碰上一个。但是,仔细阅读C和Posix标准后,您会发现,这些文件系统必须仍然可以通过兼容的实现来使用,其结果是,必须准备一个完全可移植的程序来处理输出的行长限制和输入的尾随空白。
关于javascript - JS词汇-多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149649/
我有一个 html 格式的表单: 我需要得到 JavaScript在value input 字段执行,但只能通过表单的 submit .原因是页面是一个模板所以我不控制它(不能有
我管理的论坛是托管软件,因此我无法访问源代码,我只能向页面添加 JavaScript 来实现我需要完成的任务。 我正在尝试用超链接替换所有页面上某些文本关键字的第一个实例。我还根据国家/地区代码对这些
我正在使用 JS 打开新页面并将 HTML 代码写入其中,但是当我尝试使用 document.write() 在新页面中编写 JS 时功能不起作用。显然,一旦看到 ,主 JS 就会关闭。用于即将打开的
提问不是为了解决问题,提问是为了更好地理解系统 专家!我知道每当你将 javascript 代码输入 javascript 引擎时,它会立即由 javascript 引擎执行。由于没有看过Engi
我在一个文件夹中有两个 javascript 文件。我想将一个变量的 javascript 文件传递到另一个。我应该使用什么程序? 最佳答案 window.postMessage用于跨文档消息。使
我有一个练习,我需要输入两个输入并检查它们是否都等于一个。 如果是 console.log 正则 console.log false 我试过这样的事情: function isPositive(fir
我正在做一个Web应用程序,计划允许其他网站(客户端)在其页面上嵌入以下javascript: 我的网络应用程序位于 http://example.org 。 我不能假设客户端网站的页面有 JQue
目前我正在使用三个外部 JS 文件。 我喜欢将所有三个 JS 文件合而为一。 尽一切可能。我创建 aio.js 并在 aio.js 中 src="https://code.jquery.com/
我有例如像这样的数组: var myArray = []; var item1 = { start: '08:00', end: '09:30' } var item2 = {
所以我正在制作一个 Chrome 扩展,它使用我制作的一些 TamperMonkey 脚本。我想要一个“主”javascript 文件,您可以在其中包含并执行其他脚本。我很擅长使用以下行将其他 jav
我有 A、B html 和 A、B javascript 文件。 并且,如何将 A JavaScript 中使用的全局变量直接移动到 B JavaScript 中? 示例 JavaScript) va
我需要将以下整个代码放入名为 activate.js 的 JavaScript 中。你能告诉我怎么做吗? var int = new int({ seconds: 30, mark
我已经为我的 .net Web 应用程序创建了母版页 EXAMPLE1.Master。他们的 I 将值存储在 JavaScript 变量中。我想在另一个 JS 文件中检索该变量。 示例1.大师:-
是否有任何库可以用来转换这样的代码: function () { var a = 1; } 像这样的代码: function () { var a = 1; } 在我的浏览器中。因为我在 Gi
我收到语法缺失 ) 错误 $(document).ready(function changeText() { var p = document.getElementById('bidp
我正在制作进度条。它有一个标签。我想调整某个脚本完成的标签。在找到可能的解决方案的一些答案后,我想出了以下脚本。第一个启动并按预期工作。然而,第二个却没有。它出什么问题了?代码如下: HTML:
这里有一个很简单的问题,我简单的头脑无法回答:为什么我在外部库中加载时,下面的匿名和onload函数没有运行?我错过了一些非常非常基本的东西。 Library.js 只有一行:console.log(
我知道 javascript 是一种客户端语言,但如果实际代码中嵌入的 javascript 代码以某种方式与在控制台上运行的代码不同,我会尝试找到答案。让我用一个例子来解释它: 我想创建一个像 Mi
我如何将这个内联 javascript 更改为 Unobtrusive JavaScript? 谢谢! 感谢您的回答,但它不起作用。我的代码是: PHP js文件 document.getElem
我正在寻找将简单的 JavaScript 对象“转储”到动态生成的 JavaScript 源代码中的最优雅的方法。 目的:假设我们有 node.js 服务器生成 HTML。我们在服务器端有一个对象x。
我是一名优秀的程序员,十分优秀!