如果前一个字符串为true,则返回false,否则为true - javascript

时间:2015-11-15 19:51:05

标签: javascript function if-statement boolean

因此,如果我想在函数中的字符串值之间交替使用true和false,我将如何做到这一点?我知道它与标题类似但不确定如何将第一部分放入实际的javascript中。

function tfAlternate(s) {

}

让我们说 s = “你好”

如果前一个字符串为true(在这种情况下没有前一个字符串)返回false,否则为true。

所以 s 会是真的。

但是如果 s = “再见”现在我希望它是假的,如果它遵循if语句,因为 s 之前是真的

那我怎么能把它写成if语句?

希望这是有意义的,并提前感谢。

2 个答案:

答案 0 :(得分:1)

你好!

如果我理解正确,你需要一个接受字符串作为输入的函数;并返回先前接受的字符串的布尔反转。如果没有前一个字符串,则表现为前一个字符串为false,从而使输出成为真。

我同意@CD ..和@Felix King。您需要跟踪上一个字符串。

但是我没有在函数本身上使用全局变量或属性,而是建议使用闭包:

var tfAlternate = (function () {
    var previousStr = null;     // False value, for no previous string.
    return function (s) {
        var ans = !previousStr; // Negate previous string. 
        previousStr = s;        // Current string is the next previous string.
        return ans;             // Return negated previous string.
    };
}());

将上述代码粘贴到浏览器的控制台中;并试驾:

tfAlternate("Hello");   // true,  because !null is true
tfAlternate("goodbye"); // false, because !"Hello" is false
tfAlternate("foo");     // false, because !"goodbye" is false
tfAlternate("");        // false, because !"foo" is false
tfAlternate("bar");     // true,  because !"" is true
tfAlternate("baz");     // false, because !"bar" is false

希望这会有所帮助。

PS:我发现这个问题非常有趣。但是,措辞不明确。如果我对这个问题的解释是正确的,请告诉我;我会编辑问题以提高清晰度。

答案 1 :(得分:0)

你不得不在函数调用之间保持状态。有多种方法可以做到这一点。一种是将状态保持在变量中:

var previous = false;
function tfAlternate() {
  return (previous = !previous);
}

但是,此处previous可在函数外部访问,并污染范围。我们使用previous这一事实更多的是函数的实现。我们可以保持"私人"通过创建一个新的范围并使函数靠近它:我们创建一个closure

var tfAlternate = (function() { // IIFE: Immediately Invoked Function Expression
  var previous = false;
  return function tfAlternate() { // name is optional, but helps with debugging
    return (previous = !previous);
  };
}());

在JavaScript中,范围主要由函数创建,因此我们调用一个函数来创建范围(IIFE),定义其中的所有私有变量,并返回应该由其他代码调用的函数。