gpt4 book ai didi

javascript - 为什么逻辑或不能处理 JavaScript 中的错误抛出?

转载 作者:IT王子 更新时间:2023-10-29 03:00:41 26 4
gpt4 key购买 nike

这是一个非常常见且有用的做法:

// default via value
var un = undefined
var v1 = un || 1

// default via a function call
var myval = () => 1
var v2 = un || myval()

但是抛出错误时它不起作用(SyntaxError):

var v3 = un || throw new Error('un is not set!')

有没有办法以同样优雅的方式实现同​​样的效果?恕我直言,这是很多样板代码:

if (!un) {
throw new Error('un is not set!')
}
var v3 = un

或者是否存在任何理论上的障碍,为什么这不可能,而且永远不可能?

最佳答案

throw 只是一个语句;它可能不存在于需要表达式 的位置。出于类似的原因,您不能在此处放置 if 语句,例如

var something = false || if (cond) { /* something */ }

也是无效语法。

只有表达式(求值为一个值的东西)被允许分配给变量。如果你想throw,你必须throw作为一个语句,这意味着你不能把它放在一项任务。

我想一种方法是在 || 的右侧使用 IIFE,允许您在该函数的第一行使用语句:

var un = undefined
var v2 = un || (() => { throw new Error('nope') })();

但这很奇怪。我更喜欢显式的 if - throw

关于javascript - 为什么逻辑或不能处理 JavaScript 中的错误抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com