Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用链式布尔或三元运算符重新分配变量_Javascript_Conditional Operator_Boolean Expression - Fatal编程技术网

Javascript 使用链式布尔或三元运算符重新分配变量

Javascript 使用链式布尔或三元运算符重新分配变量,javascript,conditional-operator,boolean-expression,Javascript,Conditional Operator,Boolean Expression,澄清: 这纯粹是为了实验目的,学习一门新语言(对我来说)的怪癖、零碎。如果我与其他人共享此代码,我当然会将其写得可读。:-) 我有一个函数someFunction(x),和两个全局变量: 设m=2; 设e=5; 在函数内部,我想检查x==m。如果这是真的,我想将m传递给一个side函数调用(sideFunction(m)),然后将x重新分配给e以完成someFunction const fn = x => (x == m && (sideFunction(m), x =

澄清:
这纯粹是为了实验目的,学习一门新语言(对我来说)的怪癖、零碎。如果我与其他人共享此代码,我当然会将其写得可读。:-)


我有一个函数
someFunction(x)
,和两个全局变量:

设m=2;
设e=5;
在函数内部,我想检查
x==m
。如果这是真的,我想将
m
传递给一个side函数调用(
sideFunction(m)
),然后将
x
重新分配给
e
以完成
someFunction

const fn = x => (x == m && (sideFunction(m), x = e), doOtherStuffWith(x));
确实按预期工作:

const someFunction=x=>{
如果(x==m){
副功能(m);
x=e;
}
dootherstuff(x);
}
不过,我想把它缩短,最好是一行。这也是为了进一步了解三元数和/或布尔链

我尝试过这两种方法:

//布尔链接
const someFunction=x=>{
x==m&&sideFunction(m)&&(function(){x=e})();
dootherstuff(x);
}
这不起作用,大概是因为赋值
x=e
仅适用于内部匿名函数的局部范围内的
x

//三元运算符
const someFunction=x=>{
x=(x==m&&sideFunction(m))?e:x;
dootherstuff(x);
}
这不起作用,大概是因为
sideFunction(m)
由于某种原因实际上没有被调用

我如何修复这些问题以使其正常工作?
或者,是否有其他优雅的方法来执行此检查/调用/重新分配,而无需完整的多行
if

多谢各位

x == m && sideFunction(m) && (function () {x = e})();
&&
从左到右求值,并在找到第一个假值后立即停止。除非
sideFunction
返回显式真实的内容,否则第三个生命:

(function () {x = e})()
将永远不会运行,导致永远不会重新分配
x

x
在该函数中是本地的。如果您可以让函数运行,它将根据需要重新分配
x

可以使用逗号运算符:

x == m && (sideFunction(m), x = e);

同样地

x = (x == m && sideFunction(m)) ? e : x;
将不起作用,因为
sideFunction
必须为条件的左侧返回truthy值才能进行truthy计算-否则,
x
将被分配给
x
,没有更改



所有这些都说明了——我强烈建议不要做这些事情。第一种方法更具可读性,可读性比行守恒更重要。

您可以使用带a的复合表达式,而不必关心
边函数的结果值

const fn = x => (x == m && (sideFunction(m), x = e), doOtherStuffWith(x));

逗号运算符
可用于链接表达式并返回最后一个表达式,例如

var x=(1+2,10+2,100+2);
x;
//=> 102
我们可以使用它计算
sideFunction(m)
并返回
e
(sideFunction(m),e)

由于您总是希望执行
doOtherStuffWith
,因此只需确定是给它
e
还是给它原始的
x

constsomefunction=x=>doOtherStuffWith(x==m)(sideFunction(m,e):x);

sideFunction
返回什么?看起来像一个void函数,在这种情况下,它将计算为
false
…“这不起作用,可能是因为赋值x=e只应用于内部匿名函数的局部范围内的x…?”或者可能是因为
someFunction
返回一个falsy值。可能
未定义
(如果它没有显式的
返回
)。我看不出有什么必要缩短它。你试着看看它给你带来了什么——你在这个问题上花了多少时间和打字?它弥补了你可能保存的几个字符吗?保持简短:不要写这一行。@fredrik Woah,我甚至没有想到这一点。谢谢大家!@VLAZ我正在尝试学习语言是如何工作的。我决不会在生产环境中这样写它。:-)无论如何谢谢你!作为记录,这比OP的长度短四(4)个字符。如果我们不考虑连续空格。