V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Cielos
V2EX  ›  JavaScript

菜鸟发问!在 for 循环里写 (a == -1) && break; 会报错是咋回事?

  •  
  •   Cielos · 2020-04-30 17:07:57 +08:00 · 3605 次点击
    这是一个创建于 1428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    而我用 if (a == -1) break; 就一切正常,搞不懂

    请问各位大佬,错在哪里啊?
    22 条回复    2020-05-02 12:22:13 +08:00
    sarvatathagata
        1
    sarvatathagata  
       2020-04-30 17:20:18 +08:00
    break 是一条语句,不能被转换成一个值。然而&&操作符的两侧必须是值
    kiracyan
        2
    kiracyan  
       2020-04-30 17:36:24 +08:00
    这编译报错吧
    phpfpm
        3
    phpfpm  
       2020-04-30 17:38:04 +08:00   ❤️ 4
    看了你的头像,我发出了沉思:可能你入错行了。。
    DL9412
        4
    DL9412  
       2020-04-30 17:38:10 +08:00
    个人理解,逻辑运算符两端都应该是一个值,或者能输出值的表达式。break,return,continue 都没法转换为值。
    你 Boolean(break)也会报一样的错误。

    看见一个类似的问题 http://stackmirror.caup.cn/page/rh50ycxwvuig
    liuxiaohua
        5
    liuxiaohua  
       2020-04-30 17:38:22 +08:00
    楼主这是哪门子的语法 第一次见
    kumasama
        6
    kumasama  
       2020-04-30 17:45:14 +08:00
    哪有这种语法,不加&&多简洁
    Cielos
        7
    Cielos  
    OP
       2020-04-30 17:45:47 +08:00
    纳鲁货多!谢谢二位大佬
    @DL9412
    @sarvatathagata
    hbolive
        8
    hbolive  
       2020-04-30 17:45:51 +08:00
    头像把我吸引进来的。。
    annielong
        9
    annielong  
       2020-04-30 17:47:13 +08:00
    老老实实按语法走不好吗、
    sneezry
        10
    sneezry  
       2020-04-30 17:47:57 +08:00 via iPhone   ❤️ 1
    是参考了 make && make install 么 (doge
    vicnicLight007
        11
    vicnicLight007  
       2020-04-30 17:49:13 +08:00
    请给我你头像的高清大图链接,谢谢
    krixaar
        12
    krixaar  
       2020-04-30 17:51:11 +08:00
    我大概明白了,因为 true && expr2 返回 expr2,所以楼主认为 true && break;返回 break;,然后 for 循环就被 break 了🤣
    break;是个 statement (语句)不是 expression (表达式),所以不能用在这里🤣

    参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators
    Cielos
        13
    Cielos  
    OP
       2020-04-30 17:51:24 +08:00
    @annielong 李立超的 JS 教程里这样用过,我就拿来当 低配 if 用了
    l1nyanm1ng
        14
    l1nyanm1ng  
       2020-04-30 17:57:55 +08:00
    大大大(指代码
    doge
    fengtons
        15
    fengtons  
       2020-04-30 18:12:07 +08:00 via Android   ❤️ 2
    这种写法估计是 SHELL 写多了
    InkStone
        16
    InkStone  
       2020-04-30 18:14:48 +08:00
    其实如果 break 不是一个语句是一个表达式的话,这样写问题不大。
    毕竟 C 的短路求值是标准行为。
    autoxbc
        17
    autoxbc  
       2020-04-30 18:50:43 +08:00
    1. 代码要语义化,看起来在做的事情就应该是你真的希望做的事情
    2. 不要利用副作用,副作用可能被标准化,也可能不是
    liuzhiyong
        18
    liuzhiyong  
       2020-04-30 19:42:35 +08:00
    劝告楼主不要这样操作,代码首要任务是可读性,况且你这奇怪写法还没有性能提升。
    Takamine
        19
    Takamine  
       2020-04-30 21:09:21 +08:00
    我记得 PHP 里面有这种写法来着,不如试试上手世界上最好的语言。:doge:
    lizz666
        20
    lizz666  
       2020-04-30 21:26:04 +08:00
    xingheng
        21
    xingheng  
       2020-04-30 23:58:53 +08:00
    Hello, world!

    Goodbye, world!
    cigarzh
        22
    cigarzh  
       2020-05-02 12:22:13 +08:00
    shell 写多了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3072 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 14:36 · PVG 22:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.