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

2018-06-11 10:27:38 +08:00
 zsxzy
请教大佬, 我的一个 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
4458 次点击
所在节点    Node.js
9 条回复
Sparetire
2018-06-11 11:29:29 +08:00
应该是报 ReferenceError,未声明的变量你拿来用,报错退出,大部分语言都是如此吧
zsxzy
2018-06-11 11:40:30 +08:00
@Sparetire 可是直接退出了, 不报任何消息, win 10 的 ubuntu 子系统环境
sjn9588
2018-06-11 16:22:17 +08:00
有没有监听 uncaughtException,然后又不打印。加了会覆盖默认的处理。
jimchen9999
2018-06-11 19:01:27 +08:00
.....因为 if 为 false 所以不执行啊 你看不出来么?
zsxzy
2018-06-11 19:06:22 +08:00
@jimchen9999 .....

if (SENT_LIST)
await readSentFile();

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

我的意思是, 如果 SENT_LIST 有定义, 会运行后面的代码, 如果没定义, node 啥都不输出, 直接退出了
至少应该有个错误提示啊
jimchen9999
2018-06-11 19:23:25 +08:00
没定义 if 不就直接跳过 然后 结束程序了么?
Sparetire
2018-06-12 01:48:34 +08:00
。。居然会有这么多人觉得没定义的变量就是 fakse/undefined,怕不是 js 没学好,规范规定了未声明的变量拿来使用就抛 ReferenceError,基于楼主给出的代码我不会假设作用域链上声明过该变量,那就会是报错,这点应该可以通过 uncaughtException 捕获进行验证,关键是不显示报错,大概率如#3 所说,可能有哪个地方(比如框架)监听了 uncaughtException 却没打印出来
Sparetire
2018-06-12 01:49:25 +08:00
@Sparetire 笔误 false。。
jimchen9999
2018-06-15 12:41:42 +08:00
@Sparetire 我是没学好 见笑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462076

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX