Javascript 三元比较中的函数返回

Javascript 三元比较中的函数返回,javascript,ternary,Javascript,Ternary,简单的代码,但找不到答案(可能我没有深入研究,因为我的主要语言不是英语..) 如果getDeviceInfo返回的不是0(即它==true),我希望返回值是displayDevice调用中的参数 有没有办法,或者我需要写一个“定期”比较? 谢谢您可以执行以下操作,但需要使用var来避免全局变量。因此,它不是一个真正的直截了当的表达 var info; (info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = de

简单的代码,但找不到答案(可能我没有深入研究,因为我的主要语言不是英语..)

如果
getDeviceInfo
返回的不是
0
(即它
==true
),我希望返回值是
displayDevice
调用中的参数

有没有办法,或者我需要写一个“定期”比较?

谢谢

您可以执行以下操作,但需要使用var来避免全局变量。因此,它不是一个真正的直截了当的表达

var info;
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP);
虽然这不是您的问题,但您可以(或许应该)通过使用标准的
if
-
else
语句缓存结果来做类似的事情,无论是在
var info
时,还是在
if
本身中:

var info;
if (info = getDeviceInfos(deviceIP)) {
  displayDevice(info);
} else {
  dead.push = deviceIP;
}

如果您不使用三元表达式生成的值,我建议使用后一种方法以提高可读性。

您可以执行以下操作,但需要使用var来避免全局变量。因此,它不是一个真正的直截了当的表达

var info;
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP);
虽然这不是您的问题,但您可以(或许应该)通过使用标准的
if
-
else
语句缓存结果来做类似的事情,无论是在
var info
时,还是在
if
本身中:

var info;
if (info = getDeviceInfos(deviceIP)) {
  displayDevice(info);
} else {
  dead.push = deviceIP;
}

如果您不使用三元表达式生成的值,我建议使用后一种方法以提高可读性。

首先创建一个变量,然后执行赋值并进行类似的比较-

var a; // <-- A variable.
(a = getDeviceInfos(deviceIP)) ? displayDevice(a) : dead.push = deviceIP;

var a;// 首先创建一个变量,然后执行赋值并进行类似的比较-

var a; // <-- A variable.
(a = getDeviceInfos(deviceIP)) ? displayDevice(a) : dead.push = deviceIP;

var a;// 根据您在评论部分的更新(并且为了可读性起见),我建议进行两步检查:

var deviceInfo = getDeviceInfos(deviceIP);
(deviceInfo !== 0) ? displayDevice(deviceInfo) : dead.push=deviceIP;

这是一个更准确的条件检查,更容易阅读。

根据您在评论部分的更新(为了可读性起见),我建议将其分为两步检查:

var deviceInfo = getDeviceInfos(deviceIP);
(deviceInfo !== 0) ? displayDevice(deviceInfo) : dead.push=deviceIP;
这是一种更准确的状态检查,更易于阅读。

也可以进行多个三元计算(注意:条件运算符是右关联的)

也可以进行多个三元计算(注意:条件运算符是右关联的)


我知道严格来说这并不是回答你的问题,但我强烈建议你永远不要使用三元语法。在编写代码时,始终要在最容易阅读和维护的内容与紧凑、高效和酷的内容之间取得平衡

实际上,三元语法并没有比if语句快多少,所以使用它通常没有“效率”依据

比较:

var info;
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP);

var info = getDeviceInfos(deviceIP);
if (info) {
  displayDevice(info);
} else {
  dead.push = deviceIP;
}
当然,if-then样式不那么紧凑,但是它更易于理解、调试和扩展


简而言之,几乎没有理由使用三元语法:它通常对代码质量有害。避免。

我知道严格来说这并不是回答你的问题,但我强烈建议你永远不要使用三元语法。在编写代码时,始终要在最容易阅读和维护的内容与紧凑、高效和酷的内容之间取得平衡

实际上,三元语法并没有比if语句快多少,所以使用它通常没有“效率”依据

比较:

var info;
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP);

var info = getDeviceInfos(deviceIP);
if (info) {
  displayDevice(info);
} else {
  dead.push = deviceIP;
}
当然,if-then样式不那么紧凑,但是它更易于理解、调试和扩展


简而言之,几乎没有理由使用三元语法:它通常对代码质量有害。避免。

我将其移动到函数本身中

function getDeviceInfos(pIp)
{
    //code
    result ? displayDevice(result) : dead[dead.length]=pIp
}

我把它移到函数本身

function getDeviceInfos(pIp)
{
    //code
    result ? displayDevice(result) : dead[dead.length]=pIp
}

你的问题是什么?很难说你想在这里做什么。你能用经典语句写出来吗?如果syntaxIf GetDeviceInfo返回的不是0(然后是true),我希望返回值也是displayDevice Call中的参数,您是否打算将
duad
push
属性设置为
deviceIP
,或者
duad
是一个数组,并且要将
deviceIP
添加到该数组中?只需使用常规的
if…else
构造即可。在我看来,把所有的东西都塞进一行什么也得不到。你的问题是什么?很难说你想在这里做什么。你能用经典语句写出来吗?如果syntaxIf GetDeviceInfo返回的不是0(然后是true),我希望返回值也是displayDevice Call中的参数,您是否打算将
duad
push
属性设置为
deviceIP
,或者
duad
是一个数组,并且要将
deviceIP
添加到该数组中?只需使用常规的
if…else
构造即可。在我看来,把所有东西塞进一行并没有任何好处。是的,你们可以,我想说你们应该使用标准的if-then语法!是的,你可以,我会说你应该使用标准的if-then语法!“通常对代码质量有害”是一个相当大胆的说法。LOL“通常对代码质量有害”是一个相当大胆的说法。英雄联盟