函数运行所有条件,忽略当前变量

function runs all conditionals, ignores current variables

本文关键字:变量 运行 有条件 函数      更新时间:2023-09-26

我创建了一些div;它们的innerHTML属性根据当前显示的图像(由imageArray[value]定义)进行更改。我遇到的问题是,这个函数中的条件不像它们应该的那样工作。该函数运行每条语句,并在最后一个条件括号中的值处停止。这可能是一个逻辑问题或缺少一段代码,但我想听听你对如何解决这个问题的想法。

此功能通过prevImage()nextImage()触发:

function textChange(){
var titleMod = document.getElementById('title');
var dateMod = document.getElementById('date');
var infoMod = document.getElementById('info');
var pagelink = document.getElementById('enter');
if(new_image = imageArray[0]){
    titleMod.innerHTML = "This is Image 1";
    dateMod.innerHTML = "july 12 12";
    infoMod.innerHTML = "<p>paragraph goes in here</p>";
    pagelink.onclick = "window.location.href='house.html';"
    alert(''o/');
    }
if(new_image = imageArray[1]){
    titleMod.innerHTML = "This is Image 2";
    dateMod.innerHTML = "july 12 19";
    infoMod.innerHTML = "<p>paragraph</p>";
    pagelink.onclick = "window.location.href='contact.html';"
    alert('lolol');
    }
if(new_image = imageArray[2]){
    titleMod.innerHTML = "This is Image 3";
    dateMod.innerHTML = "july 12 19";
    infoMod.innerHTML = "<p>paragraph</p>";
    pagelink.onclick = "window.location.href='contact.html';"
    alert('thisWorks');
    }
}

所有条件都使用赋值而不是比较。

new_image = imageArray[2]设置new_imageimageArray[2]的值,为真值。相反,你需要比较这两件事,例如

new_image === imageArray[2]

至于为什么它们都在运行,而不是在满足第一个条件时立即短路,这是因为您使用了一系列独立的if语句,而不是if, else ifelse

if(new_image === imageArray[0]){
  ...
} else if(new_image === imageArray[1]){
  ...
} else if(new_image === imageArray[2]){
  ...
} else {
  // new_image doesn't meet any of the previous conditions
}

您在测试中使用的是"="而不是"=="。

(new_image = imageArray[1])

总是返回true

(new_image == imageArray[1])

相等性测试("==="将测试严格相等性)

您的条件将始终返回true。这是因为您将new_image设置为imageArray[#]的值。

if(new_image = imageArray[0]){

请注意,在上面一行中,您使用的是单个等号,而不是用于测试相等的双等号。单等号是赋值操作符。

应该写成:

if(new_image == imageArray[0]){

您也可以使用===,它对两个值进行严格的比较。如果您想比较两个值的types,这也很有用。

为什么赋值总是等于true呢?从技术上讲,它并不总是。等号右边的值是JavaScript正在测试的值。JavaScript会将此值转换为布尔值,而很多转换为布尔值的值恰好都变成了布尔值TRUE。在您的特殊情况下,您正在测试字符串。当将任何String转换为长度大于0的Boolean时,将计算为TRUE,这就是为什么您的代码不能像您希望的那样运行。