Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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_Ecmascript 6 - Fatal编程技术网

Javascript 为什么这个三元运算符不起作用?三元运算符不是函数吗?

Javascript 为什么这个三元运算符不起作用?三元运算符不是函数吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,我刚刚了解了三元运算符,但它的功能与我预期的不同。如果你觉得很困惑。我在控制台中一次又一次地出现错误,我不明白为什么 一个普通函数给了我一个未定义的,这很好,但是三元运算符给了我一个“未定义”的错误,但是为什么呢 三元运算符 var experiencePoints = winBattle() ? 10 : 1; 错误 VM363:1未捕获引用错误:未定义winBattle 我的职能 function experiencePoints() { if (winBattle()) {

我刚刚了解了三元运算符,但它的功能与我预期的不同。如果你觉得很困惑。我在控制台中一次又一次地出现错误,我不明白为什么

一个普通函数给了我一个未定义的,这很好,但是三元运算符给了我一个“未定义”的错误,但是为什么呢

三元运算符

var experiencePoints = winBattle() ? 10 : 1;
错误

VM363:1未捕获引用错误:未定义winBattle

我的职能

function experiencePoints() {
    if (winBattle()) {
        return 10;
    } else {
        return 1;
    }
}
它给出了:

undefined

我想得到未定义的,就像普通函数给出的一样。

错误不是因为使用了三元运算符

该消息告诉您,JavaScript在代码中的任何地方都找不到名为“winBattle()”的函数,或者至少在当前代码中找不到

正如我们将在本演示中看到的,如果声明这样一个函数,并使其返回一个简单的布尔“true”值(例如),则不会发生错误:

var experiencePoints=winBattle()?10 : 1;
console.log(体验点);
函数winBattle()
{
//我假设在这里,你会有一些逻辑来计算战斗的胜利者,然后根据谁赢了返回真或假。
返回true;

}
这两个函数不一样:函数experiencePoints仅在调用时执行,但您没有调用它。相反,您输入的函数定义本身不返回任何内容,因此您可以在控制台中看到
undefined

带有三元运算符的变量赋值是在现场执行的(它不是函数定义),因此
winBattle
此时必须存在。显然没有,所以你会出错。如果您愿意这样做:

var a = Math.random() > 0.5 ? 10 : 1
您不会得到错误,因为定义了
Math.random
。您还会在控制台中看到
undefined
,这对于像
var
这样的语句来说是正常的

回到
函数体验点
:您可能想知道为什么在
winBattle
中没有出现相同的错误。这是因为该函数尚未执行

在您真正调用它之前,您仍然有时间定义
winBattle
。但是,如果您决定调用它而不首先定义
winBattle
,您将得到相同的错误

现在你当然可以在函数中使用三元运算符,这是一个公平的比较。您可以在几个语法中进行选择。这里有两个:

function experiencePoints {
    return winBattle() ? 10 : 1;
}
或作为带表达式语法的箭头函数:

var experiencePoints = () => winBattle() ? 10 : 1;

同样,在这里,当您调用函数时,您只会得到一个关于
winBattle
的错误。

在哪里声明了
winBattle
?您是否调用了
experiencePoints
?是否在任何地方声明了
函数winBattle()
?如果不是,那就是你出错的原因。它与三元运算符的使用没有直接关系。如果调用
experiencePoints()
会发生什么?错误意味着
winBattle
不存在于您试图访问它的作用域中。除了指出这一点,我们帮不了多少忙。如果您发布了一个完整的示例,其中包含了
winBattle
的声明,那么我们可以判断您是否出错。您之所以出错,是因为函数winBattle没有定义,正如您的系统所说,不是因为您使用了三元运算符。错误信息很清楚,为什么不按原样读取?@Pilan这只会使函数的结果为false-y,因此三元数将返回1而不是10。不确定这对示例有什么影响,但感谢您的建议绝对正确,但他希望得到一个
未定义的结果:D@Pilan是的……这部分要求对我来说毫无意义。为什么有人希望函数返回未定义的?我看不出这真的有什么用处,尤其是在所示的上下文中。双向决策应该基于winBattle()的结果做出,因此我认为winBattle()应该返回一个布尔值。所以,虽然从技术上讲,这可能是要求的结果,但我认为这不是一个明智的结果。问题中仍然有相当一部分不是真的。。。这个答案解决了这个问题。例如,很明显,它们的“working”函数返回未定义的,这就是它们希望三元版本执行的操作。哪一个当然没有意义。@KevinB他们可能在浏览器控制台中运行此代码。这解释了调用函数的三元组中的
未定义的
比特
winBattle()
?你说他不打电话,但他是:
winBattle()?10 : 1;函数的,不是关于作业的。OP只定义函数
体验点
,但不执行它。好的,我明白你的意思了。函数声明发生的部分不执行。明白了:)-那么可能只是缺少一个包含?