1

我无法在网上的任何地方找到对此的参考,因为我不知道它叫什么或如何描述。

基本上我正在阅读一本 JavaScript 书籍,他们正在展示一种称为记忆的技术,该技术使用一个计算素数的函数(参见下面的代码)。我想知道的是,是否有一个术语var prime = value != 1;以及它是如何工作的?我从书中对整个函数的解释中了解到,这意味着素数被赋值但不能为 1。它不会抛出任何错误,那么它只是break从代码中吗?包括链接在内的任何信息都将受到欢迎

function isPrime(value) {
    if (!isPrime.answers) isPrime.answers = {};
    if (isPrime.answers[value] != null) {
        return isPrime.answers[value];
    }

    var prime = value != 1; 
    for (var i = 2; i < value; i++) {
        if (value % i == 0) {
            prime = false;
            break;
        }
    }
    return isPrime.answers[value] = prime;
  }
}
4

3 回答 3

2

您应该从右到左阅读该表达式以了解其含义。这里作者的意思是 的值prime是布尔值,表示是否value != 1。因此,如果 value 是 1,则 valueprime将是false并且true如果它不同于 1,则将是。

于 2013-09-30T11:11:23.687 回答
1

var prime = 价值 != 1;

您可以将此行替换为:

if((value != 1) == true)
    prime = true;
else
    prime = false;

或者改写:

if((value != 1) == true)
    prime = true;
else if((value != 1) == false)
    prime = false;

您会看到 prime 成为表达式 (value != 1) 的确切值。这就是为什么他们使用这个方便的捷径。但既然这是教 JS 的东西,他们至少应该写它:var prime = (value != 1) ? true : false;这更明显。或者更好的是让代码看起来像这样:

function isPrime(value) {
if (!isPrime.answers) isPrime.answers = {};
if (isPrime.answers[value] != null) {
    return isPrime.answers[value];
}

if(value == 0) 
   isPrime.answers[value] = false;
else if(value == 1) 
   isPrime.answers[value] = true;
else {
   var prime = false;
   for (var i = 2; i < value; i++) {
      if (value % i == 0) {
          prime = true;
          break;
      }
   }
   isPrime.answers[value] = prime;
 }
 return isPrime.answers[value];
}

我想这样会更清楚。但也许他们想让你教你所有这些捷径。我不知道。上面的代码与原始版本中发生的相同。您会看到还有一些额外的行,因为我没有使用赋值也代表了 JavaScript 提供的结果(并且在扩展 Java 中也是如此)。

于 2013-09-30T11:26:34.767 回答
0

value != 1您分配以初始化比较返回的布尔值

于 2013-09-30T11:11:17.933 回答