【问题标题】:Why can't println(); be used as a variable?为什么不能 println();用作变量?
【发布时间】:2016-10-19 04:35:13
【问题描述】:

我对 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,它会触发哨兵,从而及时显示消息。这是问一个简单问题的一种非常迂回的方式,但我希望我能得到一些帮助。谢谢你:)

【问题讨论】:

  • println 到底是什么?或RandomizerreadInt
  • @AndrewLi 可能是给定助手库的任务。
  • 你需要告诉我们@DorInte,我们无法猜测这些方法是如何实现的
  • 澄清:println();用于写入文本或数字,也可用于写入变量的值(这似乎与我在这里看到的 (console.log(...)) 非常相似)。 Randomizer 是一个在两个给定整数之间选择一个随机数的函数。(在本例中为 1-6)。 readInt 是一个函数,它创建一个弹出窗口,询问用户一个数字,如果用户键入 -1,它会触发哨兵。很抱歉造成混乱,我正在使用的网站(代码)似乎使用了伪语言。
  • @DorInte 您希望println 返回的值等于-1?

标签: javascript


【解决方案1】:

为什么命令"println("...");不能作为变量调用如:var num = println("..."); [...] 它不会给出消息并且似乎无法查看变量

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

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

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

注意,println 不是标准 JavaScript 语言的一部分。对于现代网络浏览器,它可以适应使用(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");

【讨论】:

  • 应该可以将任何函数的返回值赋给一个变量,注意有些函数返回undefined
  • @nnnnnn 添加了关于undefined 的注释并在上下文中添加了相关引用
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    在 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 的值连接起来的结果。

    【讨论】:

    • 变量 num 中的 + 号可能会让人感到困惑,但它应该表示该变量应该同时打印 rollOne 和 rollTwo,而不是将它们相加。
    • @DorInte 这没有意义吗?您将添加两个整数,然后将其传递给println,如果您想打印它们都使用字符串。
    • 这不是我将两个整数相加,而是显示rollOne和rollTwo的结果。 + 可以看作是“以及”。伪语言教我们这样做的方式是说 rollOne += rollTwo。
    • 这不是 + 在 JavaScript 中的工作方式。在 JS(以及几乎所有其他编程语言)中,当您说 println(rollOne + rollTwo) 时,首先会评估 rollOne + rollTwo,这意味着如果这些变量包含数字,则它会进行加法运算,如果这些变量包含字符串,则会进行串联,并且 然后函数println()被调用,结果是加法/减法。我将对我的答案进行小幅更改,以显示如何输出 "1 1""4 2" 之类的内容。
    • 嗯,这很有趣,我想这真的是一种低于标准的伪语言。如果是这样的话,我不确定如果他们无法理解他们正在阅读的内容,是否有人真的可以提供帮助。无论如何,这只是我头脑中的一个问题。感谢大家的支持:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多