zsxzy
V2EX  ›  Node.js

node 当变量未定义时, 无任何提示退出

  •  
  •   zsxzy · Jun 11, 2018 · 4945 views
    This topic created in 2893 days ago, the information mentioned may be changed or developed.
    请教大佬, 我的一个 js 程序, use strict 模式下,
    如果把下面这行注释掉,
    let SENT_LIST = process.argv.slice(2)[4];

    当这段代码访问 SENT_LIST , node 直接退出, 没任何提示, 这是为什么?
    if (SENT_LIST) {
    await readSentFile();
    }

    ENV: node v8.11.2, ubuntu 18.04
    9 replies    2018-06-15 12:41:42 +08:00
    Sparetire
        1
    Sparetire  
       Jun 11, 2018 via Android   ❤️ 1
    应该是报 ReferenceError,未声明的变量你拿来用,报错退出,大部分语言都是如此吧
    zsxzy
        2
    zsxzy  
    OP
       Jun 11, 2018
    @Sparetire 可是直接退出了, 不报任何消息, win 10 的 ubuntu 子系统环境
    sjn9588
        3
    sjn9588  
       Jun 11, 2018   ❤️ 1
    有没有监听 uncaughtException,然后又不打印。加了会覆盖默认的处理。
    jimchen9999
        4
    jimchen9999  
       Jun 11, 2018
    .....因为 if 为 false 所以不执行啊 你看不出来么?
    zsxzy
        5
    zsxzy  
    OP
       Jun 11, 2018
    @jimchen9999 .....

    if (SENT_LIST)
    await readSentFile();

    let csvStream = csv()
    .on("data", function (data) {

    我的意思是, 如果 SENT_LIST 有定义, 会运行后面的代码, 如果没定义, node 啥都不输出, 直接退出了
    至少应该有个错误提示啊
    jimchen9999
        6
    jimchen9999  
       Jun 11, 2018
    没定义 if 不就直接跳过 然后 结束程序了么?
    Sparetire
        7
    Sparetire  
       Jun 12, 2018 via Android   ❤️ 1
    。。居然会有这么多人觉得没定义的变量就是 fakse/undefined,怕不是 js 没学好,规范规定了未声明的变量拿来使用就抛 ReferenceError,基于楼主给出的代码我不会假设作用域链上声明过该变量,那就会是报错,这点应该可以通过 uncaughtException 捕获进行验证,关键是不显示报错,大概率如#3 所说,可能有哪个地方(比如框架)监听了 uncaughtException 却没打印出来
    Sparetire
        8
    Sparetire  
       Jun 12, 2018 via Android
    @Sparetire 笔误 false。。
    jimchen9999
        9
    jimchen9999  
       Jun 15, 2018
    @Sparetire 我是没学好 见笑了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1796 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 16:20 · PVG 00:20 · LAX 09:20 · JFK 12:20
    ♥ Do have faith in what you're doing.