为什么不能println();用作变量?

时间:2016-10-19 04:35:14

标签: javascript

我对Javascript很新,对某些事感到困惑。为什么命令“println(”...“);不能被称为变量,如:var num = println(”...“);.我可能是错的,如果你能够,我我很乐意知道如何。但经过一些测试后,似乎我不能。我的测试代码是:

function start() {
    var SENTINEL = "1 1";
    var rollOne = Randomizer.nextInt(1, 6);
    var rollTwo = Randomizer.nextInt(1, 6);
    var num = println(rollOne + rollTwo);
    if(num == SENTINEL) {
          println("You did it");
    }
}

所有它应该做的是给##形式的随机数,如果它看到数字是1,1,它将给出一个消息。它不会给出消息,似乎无法将变量“num”视为实际变量。但是,当我更改变量num以简单地询问用户输入数字时:

function start() {
    var SENTINEL = -1;
    var rollOne = Randomizer.nextInt(1, 6);
    var rollTwo = Randomizer.nextInt(1, 6);
    var num = readInt("Enter number");
    if(num == SENTINEL) {
        println("You did it");
}

} 并输入-1,它会触发标记,从而及时显示消息。这是一个非常迂回的方式来问一个简单的问题,但我希望我能得到一些帮助。谢谢:))

3 个答案:

答案 0 :(得分:1)

  

为什么命令" println(" ...");被称为变量,如:var num = println(" ...");    [...]它不会给出消息,似乎无法查看变量

如果返回的值不可用,则很可能是undefined;即函数println没有明确地返回任何内容。

在你的情况下,你可以尝试这样的事情:

var printInt = function(num) { println(num); return num; }

注意,println不是标准JavaScript语言的一部分。对于现代Web浏览器,它可以适应使用(console.log(...))。

var printInt = function(num) { console.log(num); return num; }

然后适应你的代码:

var num = printInt(rollOne + rollTwo);

但是这仍然无法验证,因为您正在与"1 1"进行比较,而您的逻辑将返回2。 JavaScript(以及许多其他语言)在提供两个数字时隐式使用addition,但在提供至少一个字符串时使用连接。

var SENTINEL = "1 1";  // <---- String!
var SENTINEL = -1;     // <---- Number!

所以你应该考虑这样的事情(相应地重命名):

var printRolls = function(text) { println(text); return text; }
var rolls = printRolls(rollOne + " " + rollTwo);
if(rolls == SENTINEL) {
      println("You did it");
}

或者简化一下:

if(printRolls(rollOne + " " + rollTwo) == SENTINEL)
    println("You did it");

答案 1 :(得分:0)

println可能无法返回传入的字符串。在这种情况下,您可以使用

if (SENTINEL === rollOne + " " + rollTwo)

格式化字符串并正确测试相等性。

答案 2 :(得分:0)

在JavaScript中,可以将任何函数的返回值赋给变量,类似于你完成它的方式:

var anyVariable = anyFunction();

,某些函数返回值undefined。或者他们返回一个数字,或数组,或......等等。

我想你的println()函数会打印你传递给它的值(在屏幕上?到控制台?),然后返回undefined。或者,如果它返回打印值,则其格式与您在SENTINEL变量中使用的格式不同。那么当你尝试将其与SENTINEL进行比较时,它就不会相等。

要修复原始功能,请将滚动总和分配给变量,然后打印并测试:

function start() {
    var SENTINEL = 2;
    var rollOne = Randomizer.nextInt(1, 6);
    var rollTwo = Randomizer.nextInt(1, 6);
    var num = rollOne + rollTwo;
    println(num);
    if(num == SENTINEL) {
          println("You did it");
    }
}

编辑:如果您希望println()显示类似"1 1""3 5"的字符串,以显示两个卷中的每一个,那么请执行以下操作:

println(rollOne + " " + rollTwo);

也就是说,创建一个新字符串,该字符串是将rollOne的值与单个空格连接,然后是rollTwo的值的结果。