首页 / 知识
在JavaScript中进行对象文字赋值后是否需要分号?
2023-04-14 02:43:00

Are semicolons needed after an object literal assignment in JavaScript?以下代码说明了分配的对象文字,但之后没有分号:
这似乎是合法的,并且不会发出警告(至少在Firefox3中)。 这是完全合法的,还是在不允许使用JavaScript的严格版本中? 我特别想知道将来的兼容性问题...我想编写"正确的" JavaScript,所以从技术上讲,如果我需要使用分号,则希望使用它。 从技术上讲,JavaScript在许多情况下都具有分号作为可选项。 但是,作为一般规则,请在任何语句的末尾使用它们。为什么?因为如果您想压缩脚本,它将使您免于无数小时的沮丧。 自动分号插入由解释器执行,因此您可以根据需要将其省略。在评论中,有人声称
但这是不正确的。它们是可选的;实际情况是,行终止符会影响分号的自动插入;这是一个微妙的区别。 这是分号插入的其余标准:
由于它们基于完整的JavaScript解析器,因此在不使用分号的情况下,YUI Compressor和dojo收缩安全功能应该可以很好地工作。但是Packer和JSMin不会。 始终在语句末尾使用分号的另一个原因是,有时您可能会意外地将两个语句组合在一起以创建非常不同的内容。例如,如果您使用通用技术遵循语句以使用闭包创建范围:
解析器可能将方括号解释为函数调用,从而导致类型错误,但在其他情况下,它可能导致难以跟踪的细微错误。另一个有趣的事故是,如果下一条语句以正则表达式开头,则解析器可能会认为第一个正斜杠是除号。 JavaScript解释器执行称为"分号插入"的操作,因此,如果没有分号的行有效,则分号将被安静地添加到语句的末尾,并且不会发生错误。
不太复杂,当某些事情显然不正确时,至少会引发错误。但是在某些情况下,由于分号的插入,不会引发错误,但是语句没有按预期执行。考虑一个应该返回一个对象的函数:
像这样的错误可能非常难以捉摸,尽管您不能确保这种情况永远不会发生(因为我无法关闭分号插入),但是当您通过以下方式使意图清晰时,这些类型的错误就更容易识别始终使用分号。明确地添加分号通常被认为是好的样式。 在阅读道格拉斯·克罗克福德(Douglas Crockford)精湛而简洁的书《 JavaScript:The Good Parts》时,我第一次意识到这种隐患的可能性。我强烈推荐它。 在这种情况下,语句末尾不需要分号。结论是相同的,但是推理还很遥远。
JavaScript没有将分号作为"可选"。相反,它对自动分号插入有严格的规定。分号对于 不需要分号。有些人选择遵循始终以分号终止的约定,而不是允许JavaScript在换行符处自动终止,但是我敢肯定,您会发现支持这两个方向的组。
如果您要编写"正确的" JavaScript,我建议在Firefox中将 使用JSLint保持JavaScript整洁 JSLint说:
这是无效的(请参阅下面的说明)JavaScript代码,因为赋值只是一个常规语句,与
由于JavaScript解释器会尝试添加分号来修复语法错误,因此可以省去分号,但这是一个额外且不必要的步骤。我不知道任何严格的模式,但是我知道自动解析器或压缩器/混淆器需要该分号。 如果要编写正确的JavaScript代码,请写分号:-) 根据ECMAscript规范http://www.ecma-international.org/publications/standards/Ecma-262.htm,如果缺少分号,则会自动插入。这使得脚本作者不需要它们,但是这意味着解释器需要它们。这意味着原始问题的答案是"否",编写脚本时不需要回答,但正如其他人所指出的,出于各种原因建议这样做。 |
最新内容
相关内容
在Python中使用带有列表和字符串文
在Python中使用带有列表和字符串文字的for循环,代码,数字,培训,之间,字符串,列表,语句,文字,奇数,这一点,现在看一下下面的代码,输出1到100之Python类和对象
Python类和对象,代码,培训,对象,实例,定义,关键字,函数,问题,顶层,全名,刚接触python中的类和对象,我也和大多数小伙伴一样迷茫,不知道它和我所Python中JSON 对象有哪些特点?
Python中JSON 对象有哪些特点?,名称,信息,代码,培训,数据,观察,对象,嵌套,数组,特点,JSON对象的结构是什么样子呢?上面代码中的obj就是一个JSPython中的对象
Python中的对象,数据,连续,代码,培训,概念,对象,内存,类型,初始化,静态,Python中一切皆是对象。————GuidovanRossum(1989)这句话只要你学列举Python面向对象中带双下划线的
列举Python面向对象中带双下划线的特殊方法,信息,代码,培训,对象,属性,方法,实例,字符串,里边,内容,__new__:生成实例__init__:生成实例的属性_Python面向对象的基本概念
Python面向对象的基本概念,概念,信息,位置,新增,培训,属性,鸟类,定义,对象,方法,python使用类(class)和对象(object),进行面向对象(object-oriPython之面向对象的进一步拓展
Python之面向对象的进一步拓展,信息,对象,操纵,培训,名字,方法,性质,参数,属性,定义,我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能Python 条件对象
Python 条件对象,状态,培训,对象,条件,线程,方法,底层,发生,场景,典型,条件对象总是与某种类型的锁对象相关联,锁对象可以通过传入获得,或者在Python 事件对象
Python 事件对象,通信,培训,线程,事件,对象,内部,标志,信号,机制,以上,一个线程发出事件信号,其他线程等待该信号,这是最简单的线程之间通信机Python之什么是面向对象?
Python之什么是面向对象?,设计,流程,代码,个体,大唐,对比,培训,模子,上帝,对象,OOP(ObjectOrientedPrograming)编程是利用“类”和“对象”来Python 面向对象的软件开发
Python 面向对象的软件开发,设计,软件,分析,发展,工作,基础,代码,工具,通用,规模,很多人在学完了python的class机制之后,遇到一个生产中的问题Python 信号量对象
Python 信号量对象,时间,培训,计数器,对象,机制,内部,参数,线程,剩余,数量,和锁机制一样,信号量机制也是一种实现线程同步的机制,不过它比锁多