首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS分号可以省掉

摘要: JavaScript语言从设计之初就是考虑带分号,使用不带分号编码规则就要小心点啦。...这么简单代码为什么会出错呢?第一反应就是JS引擎将代码生成语法树时候,可能解析不正确。于是,我在第一行末尾加分号测试。...在网络上搜索JavaScript关于分号BUG,发现有非常多关于要不要使用分号讨论。...大宗师Douglas Crockford表示要正确使用分号 引用minhan在扯不完 JS 分号问题文中论述: JSON、JSLint、JSMin和ADSafe 创造者、ECMA JavaScript...如果你不想用分号,又怕出问题,v2ex上有位童鞋给出了一个速记方案: 如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头语句前面都加上一个分号

9K60

JS魔法堂:ASI(自动分号插入机制)和前置分号

,而且必须加分号,否则编译就不通过了。...ASI机制不是说在解析过程解析器自动把分号添加到代码,而是说解析器除了分号还会以换行为基础按一定规则作为断句依据,从而保证解析正确性。    首先这些规则是基于两点: 1....那既然存在ASI机制,那为什么还有那么多团队代码规范还规定必须写分号呢?不外乎三个原因:1. 因为存在No ASI情况,懒得记忆这些特例;2....对于省略分号后代码压缩工具会出问题,jslint会对无分号代码报warning等问题,贺师俊已经在回复对其进行详细说明了。... .,*% 作为语句开头,因此只需记住前面5个即可,你看能懒则懒哦)  然后就是通过合理缩进和空白行来使代码结构更为清晰(coffeescript不就是这样?!)

1.8K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS该写分号嘛? - wuuconixs blog

    ASI 在写JS之前,我一直在写Python,习惯了没有分号代码。 刚好,JS为我们提供了 自动分号插入 Automatic Semicolon Insertion!...这让我们在大部分情况下都不用写分号,非常优雅。 然而ASI在某些情况下将产生错误。 ASI发生错误情况 IIFE 立即调用函数表达式 考虑以下代码。...> node 1.js a: 4 b: 3 c: 3 d: 4 js把中间两个swap看成了 [a, b] = [b, a][c, d] = [d, c] 仍然是一个连等,我们需要从右往左看,首先是...这种没有报错隐式错误,真在Leetcode刷题时候 够你Debug半天了2333。 总结 实际上,完全不用为了ASI在一些情况下导致错误而每行都加上一个分号。...对于我目前遇到这两种情况,可以总结一下,如果一行开始是一个(或者[,那么再上一行你需要手动加上一个分号,至于其他情况,完全不用考虑分号~ 还可以参考一下尤大这篇回答 https://www.zhihu.com

    1.1K20

    node.js要不要加分号

    一开始,关于在node.js句末不加分号,我是拒绝。因为有时不加分号会报错。 我觉得node.js在语法层面挺拧巴,要么就像PHP那样严格要求加分号,要么就像python一律不加分号。...而node.js却表现出一副欲拒还迎姿态,让人感觉就是既要拥抱变化,又要抱残守缺。 ?...加不加分号,这是一个问题 直到有一天我了解了加不加分号场景,才终于释然 一言以蔽之:当代码是以 ( [ ` 这些符号开头时,就需要在代码之前加上分号,其他场景都不需要加分号 let msg =...:191:16) at bootstrap_node.js:612:3 正确写法: let msg = '加不加分号呢' ;(function () { console.log('我是一个匿名函数...宇宙究竟有多少个文明?

    2K20

    linux分号&&和&,|和||说明与用法

    在用linux命令时候,我们可以一行执行多条命令或者有条件执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||用法 “;”分号用法 方式:command1 ; command2 用...“| ”管道符用法 上一条命令输出,作为下一条命令参数 方式:command1 | command2 Linux所提供管道符“|”将两个命令隔开,管道符左边命令输出就会作为管道符右边命令输入。...管道将rpm -qa命令输出(包括系统中所有安装RPM包)作为grep命令输入,从而列出带有licq字符RPM包来。...命令,grep命令找出含有“/bin /bash”所有行;第二个管道将grep输出送给wc命令,wc命令统计出输入行数。...“&&”符号用法 shell 在执行某个命令时候,会返回一个返回值,该返回值保存在 shell 变量 ? 。当 ? == 0 时,表示执行成功;当 有时候,下一条命令依赖前一条命令是否执行成功。

    5.4K21

    JSObjectkeys是无序

    来自 「蔡昕萌」 同学内部分享。 在最开始学习 JavaScript 时,我一直被灌输 Object Key 是无序,不可靠,而与之相对是 Map 实例会维护键值对插入顺序。...「But,Object 键值对真的是无序?」实际上在 ES2015 以后,Object.keys 规则变了: 在一些现代浏览器,keys 输出顺序是可以预测!...总结来说,就是当前 key 如果是自然数就按照自然数大小进行升序排序。...1000"] console.log(Object.getOwnPropertyNames(objWithIndices)); // ["1", "23", "1000"] 包括在 for-in 循环遍历...String 加入时间排序,然后按照 Symbol 时间顺序进行排序,也就是说他们会先按照上述分类进行拆分,先按照自然数、非自然数、Symbol 顺序进行排序,然后根据上述三种类型下内部顺序进行排序

    3.7K20

    虚函数后面的分号可有可无_虚函数需要实现

    (默认情况下,this类型是指向类类型非常量版本常量指针。...例如在Sales_data成员函数,this类型是Sales_data *const,即类一旦实例化一个对象后,this指向这个对象,是不能改变,但是对象本身可以变) =0表示这个成员函数是纯虚函数...,也就是它可以没有定义,只有接口,由它继承类具体定义它行为,当然,你也可以给它定义缺省函数体 一个类里如果包含 =0 纯虚函数,那么这个类就是一个抽象类,它不能具体实例化(不能创建它对象),...而只能由它去派生子类 合起来在虚函数后面–>纯虚函数 const 写在函数后头还=0这里不是const=0,虚函数表示方法是 virtual 返回值 函数名(参数表){函数体} , 在继承时候可以在子类从新定义这个函数...如果你子类中都重新定义了这个函数,那个父类函数定义就没有什么用了所以可以不定义只说明就行,也就是定义为纯虚函数形如: virtual 返回值 函数名(参数表)=0;这里就不用定义实际函数了。

    31420

    JavaScript里分号,你加还是不加?

    在JavaScript,如果语句各自独占一行,通常可以省略语句之间分号(程序结尾或者右“}”之前分号也可以省略。)...因此,在编写JavaScript程序时,一般会有两种编码习惯,加分号 和 不加分号 : 加分号: 许多程序员使用分号来明确标记语句结束,即使在并不完全需要分号时候也是如此; 不加分号: 另一种风格是...,在任何可以省略分号地方,都将其省略,只有在不得不用时候才使用分号。...2.什么情况下可以不加分号 不加分号情况下,JavaScript在解析时会自动插入分号,在满足以下两个条件情况下,JavaScript会自动插入分号,可以不加分号: 2.1每条语句各占一行 如果多条语句中每条语句各占一行...; 加上分号在某些情况下可以增进代码性能,因为这样解析器就不用花多余时间去推测在哪里添加分号了。

    1.9K11

    不需要括号和分号XSS

    几年前,我发现了一种在JavaScript调用函数而不使用括号onerror和throw语句技术。...因为throw是一个语句,所以通常需要onerror使用分号来完成赋值,以便开始一个新语句而不是形成一个表达式。...我遇到了一个过滤括号和分号网站,我认为必须能够使用这种技术来执行一个没有分号函数。第一种方法非常简单:您可以使用花括号来形成一个块语句,您可以在其中进行onerror分配。...在我之前博客文章,我展示了如何使用eval作为异常处理程序并评估字符串。回顾一下,你可以在字符串前加上一个=,然后将'Uncaught'字符串变成一个变量并执行任意JavaScript。...这不起作用 - Firefox仍然使用相同字符串作为前缀。然后我使用Hackability Inspector检查Error对象以查看它具有的属性。我将所有属性添加到对象文字并且它有效!

    2.1K20

    bash 脚本中分号作用「建议收藏」

    在Linux bash shell,语句中分号一般用作代码块标识 1、单行语句一般要用到分号来区分代码块。...比如: weblogic@pmtest:/if [ “PS1” ]; then echo test is ok; fi test is ok 该脚本或命令行,须要两个分号才为正确语句,第一个分号是then...前分号,用于标识条件块结束。...第二个分号在fi前,用于标识then块结束,假设缺少这两个分号,则程序运行错误。 这里有趣是echo后字符串不须要使用引號也能正确地被识别。 注意:语句结尾不要分号。 2、该代码若写作多行。...而不使用esle if,若使用else if,则为不完整语句,如以下样例不能被正确运行: weblogic@pmtest:/if [ “PS1” ] > then echo test is ok >

    2.2K20

    你知道 JS 模块导入有一个缺点

    作者:Dmitri Pavlutin 译者:前端小智 来源:Dmitri Pavlutin 1.命名导入和自动完成 假设我信编写了一个简单JavaScript模块: // stringUtils.js...看起来没啥问题,挺好。 现在在 app.js 文件中导入函数 exequalsIgnoreCase / app.js import { equalsIgnoreCase } from '....在此步骤,IDE无法提供有关要导入可用名称任何建议。 然后,继续写入 from './stringUtils',然后移回大括号并展开自动完成以选择要导入名称。...2.Python 模块 现在让我们尝试在 Python 中导入命名组件。它有同样问题?...3.解决方法 我能找到在JavaScript对命名导入启用自动完成唯一解决方案是调用IDE以获得帮助。

    1.8K10

    jssettimeout()用法详解_jssetattribute

    大家好,又见面了,我是你们朋友全栈君。 setTimeout与setTimeInterval均为window函数,使用顶层window一般都会省去,这两个函数经常稍不留神就使用错了。...setTimeout内函数先不执行,隔一段时间后再执行,函数后面的数字是隔时间,单位是毫秒(千分之一秒) 比如: setTimeout(‘alert(“hello world!”)’..., 400); setInterval() 方法可按照指定周期(以毫秒计)来调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。 比如: Stop interval setInterval动作作用是在播放动画时...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    14.9K20

    jsfind用法_jsfind函数

    今天我们要说是结合ES6新特性谈一下js里面的一个很好用方法-find() 现在前端和过去不一样,过去前端只要会画页面就行了,但是现在仅仅会画页面已经远远不够了,现在前端还需要会处理数据,而且还要会将数据分析分类处理...下面我们讲怎么用前端处理这块逻辑 首先我们拿到了所有的数据这里我直接放到一个测试用js里面存放, 要实现之前说效果,就需要使用我们今天主角find()方法。 find()是用来做什么呢?...find()方法返回数组符合测试函数条件第一个元素。否则返回undefined 在本文章需要注意几个点: ①、第一个元素 ②、测试函数 那么如何使用呢?.../find_testcodes.js" type="text/javascript" charset="utf-8">

    11.6K30

    JS逆向 | 练手?头秃那种。

    先打上断点,重新登录一下,成功进入断点说明位置十有八九是找到了,F11进去看看里面的加密逻辑是什么样。 ? 看上去逻辑还蛮简单,就是先这样再那样然后拼接在一起返回回来,完事儿~ ?...u,d,a,e,s这几个加密都可以通过上图方法追踪到对应加密。 这里我们主要研究f与m加密逻辑。 先看看f加密逻辑: 1var f = d.length ?...这里e是初始化加密算法,我们再跟进去看看: ? ? 看到这里我已经不怎么想扣代码了,这么多乱七八糟什么东西,要是真抠出来估计头发要掉一半。 ?...而且这个代码看着也不像自写算法,估计也是套通用那几种算法,所以我开始翻之前扣过代码,果然让我找到了: ?...上面的代码是不是长得有点像,为了验证这个想法我把js里关于加密代码扣下来look look ? 不得不说好编辑器可以让你事半功倍,看到图中划线地方这个参数加密方法就一目了然了。

    70230

    JS逆向 | 练手?头秃那种。

    先打上断点,重新登录一下,成功进入断点说明位置十有八九是找到了,F11进去看看里面的加密逻辑是什么样。 ? 看上去逻辑还蛮简单,就是先这样再那样然后拼接在一起返回回来,完事儿~ ?...u,d,a,e,s这几个加密都可以通过上图方法追踪到对应加密。 这里我们主要研究f与m加密逻辑。 先看看f加密逻辑: 1var f = d.length ?...这里e是初始化加密算法,我们再跟进去看看: ? ? 看到这里我已经不怎么想扣代码了,这么多乱七八糟什么东西,要是真抠出来估计头发要掉一半。 ?...而且这个代码看着也不像自写算法,估计也是套通用那几种算法,所以我开始翻之前扣过代码,果然让我找到了: ?...上面的代码是不是长得有点像,为了验证这个想法我把js里关于加密代码扣下来look look ? 不得不说好编辑器可以让你事半功倍,看到图中划线地方这个参数加密方法就一目了然了。

    89220

    前端JS发起请求能暂停

    在讨论前端JS发起请求是否能暂停时,需要明确两个概念:什么状态可以被认为是“暂停”?以及什么是JS发起请求? 如何定义暂停? 暂停指的是临时停止一个已经开始但尚未完成过程。...TCP协议数据传输是面向流,数据被视为连续字节流。客户端发送数据将被分成多个独立传输TCP段。无法直接控制每个TCP段传输,因此无法实现暂停请求或响应功能。...如果请求指的是网络模型传输,那么自然是不可能暂停。 考虑到使用场景——由JS发起请求。因此,可以认为这里问题指的是在JS运行时发起XMLHttpRequest或fetch请求。...然而,单个请求并没有这样环境。 使用JS实现“假暂停”机制 虽然我们无法真正实现暂停请求,但我们可以模拟一个假暂停功能。在前端业务场景,数据在接收到后不会立即显示在客户端。...在代码,使用 Promise.all 将控制器 Promise 绑定。如果控制器处于暂停状态, Promise.all 不会被释放。

    8810
    领券