我能在三元运算符内部抛出错误吗?下面的写法是有效的吗:
function foo(params) {
var msg = (params.msg) ? params.msg : (throw "error");
// do stuff if everything inside `params` is defined
}
我的目标是确保所有需要的参数都在一个param
对象中定义,在任何一个参数未定义时抛出错误。
如果这样做是愚蠢的,那么有更好的方法吗?
我能在三元运算符内部抛出错误吗?下面的写法是有效的吗:
function foo(params) {
var msg = (params.msg) ? params.msg : (throw "error");
// do stuff if everything inside `params` is defined
}
我的目标是确保所有需要的参数都在一个param
对象中定义,在任何一个参数未定义时抛出错误。
如果这样做是愚蠢的,那么有更好的方法吗?
function foo(params) {
var msg = (params.msg) ? params.msg : (function(){throw "error"}());
// do stuff if everything inside `params` is defined
}
虽然它可以实现功能,但我并不推荐这样做,这会使代码难以阅读。
以下代码也可以工作(虽然并没有好多少):
function foo(params) {
var msg = params.msg || (function(){throw "error"}());
// do stuff if everything inside `params` is defined
}
或者采用更清晰的方式,创建一个具有名称的函数。function _throw(m) { throw m; }
function foo(params) {
var msg = params.msg || _throw("error");
// do stuff if everything inside `params` is defined
}
if
语句的方法。 - Hristo不行,绝对不允许。 throw
是一个语句,不能成为表达式的一部分。
不幸的是,我认为这是唯一的方法。您可以在没有括号的情况下使用 if
:
if(!params.msg) throw new Error("msg is required!");
但是我不知道有任何简单易懂的好方法。
if
语句,但看起来这样做也能达到同样的效果。感谢你的回答 :) - Hristo这是一个更加简洁的方法,适用于我:
const msg = params.msg ? params.msg : ((function () { throw new Error('Message not found); }()));
你可以在三元运算符中像这样抛出错误:
function isPositive(a) {
if(a > 0)
return "YES";
throw a == 0 ? Error("Zero Error") : Error("Negative Error");
}
在@dagg的方法和命名函数
示例的基础上进行改进;这里是相同的ES6默认参数:
function _throw(m) { throw new Error(m); }
function foo({ msg = _throw('msg parameter not defined') } = {}) {
console.log(msg);
}
foo({ msg : 'party people!' }); // :D
foo({}); // throws!
try {
var msg = (params.msg) ? params.msg : (void 0).throwError()
}
catch(e) {
throw new Error('Params has no msg property')
}
fetch
时遇到了这个问题,这是我针对该特定情况提供的解决方案:return fetch(url, request)
.then(response => response.status >= 400 && response.status < 600
? response.json().then(error => {throw new Error(error.message)})
: response);
throw
周围的(内联)块,它将箭头函数体从(返回)表达式转换为语句。function foo(params) {
let msg = params.msg ? params.msg : (() => {throw new Error('Something went wrong')})();
// do stuff if everything inside `params` is defined
}
require('assert').fail('Bad response from server or whatever')
给出:
AssertionError [ERR_ASSERTION]: Bad response from server or whatever
最简单的方法是使用箭头函数:
err
? ()=>{throw err}
: console.log('smooth')
var msg = (params.msg) ? params.msg : _throw("error");
function _throw(m) { throw m; }
- user1106925msg
?我理解在 params.msg 没有被赋值时想要抛出一个错误,我也考虑过这样做,但当我意识到这段代码会将 throw message 赋值给 msg 时,在这种情况下,似乎没有必要这样做?至少对于我的使用情况来说是这样的,所以想知道在需要这样做的情况下,msg 是如何被消耗的。 - Kreidol