Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中设置布尔变量时出现不可预测的行为[严格模式下的深度复制]_Javascript_Boolean_Windows 8.1_Windows Store - Fatal编程技术网

在JavaScript中设置布尔变量时出现不可预测的行为[严格模式下的深度复制]

在JavaScript中设置布尔变量时出现不可预测的行为[严格模式下的深度复制],javascript,boolean,windows-8.1,windows-store,Javascript,Boolean,Windows 8.1,Windows Store,我在VisualStudio中调试它,而j的值为1。因此,computerLands[1]应设置为true 相反,它设置了computerLands[1]。tapped=true和computerLands[3]。tapped=true。 这不是每次都会发生,但是很多次,因此我看不出问题出在哪里 computerLands最初是一个空数组,然后动态地将对象推入其中 如果有人知道这可能是什么问题,我会非常感激 编辑:这是填充computerLands的代码: computerLands[j].t

我在VisualStudio中调试它,而j的值为1。因此,computerLands[1]应设置为true

相反,它设置了computerLands[1]。tapped=true和computerLands[3]。tapped=true。 这不是每次都会发生,但是很多次,因此我看不出问题出在哪里

computerLands最初是一个空数组,然后动态地将对象推入其中

如果有人知道这可能是什么问题,我会非常感激

编辑:这是填充computerLands的代码:

 computerLands[j].tapped = true;
将其推入computerLands后,通过splice()将其从computerHand上拆下


最后我找到了一个解决方案,我从这个页面得到:

它描述了如何在Windows应用商店应用程序中深度复制Javascript(我发现的另一个解决方案在Windows应用商店应用程序严格模式下是不允许的),基本上是创建一个新对象并将每个属性复制到其中。下面是我的新工作代码:

var index = computerHand.indexOf(computerHand[i]);
computerHand.splice(index,1);
函数populateComputerLands(){
对于(变量i=0;i<4;i++){

//computerLands.push(可用的计算机卡[0]);可能是
computerLands[1]
computerLands[3]
指向同一个对象?发布填充数组的代码可以让我们确定。@FrédéricHamidi我添加了代码。你确定computerLands在此函数之前为空吗?@Jono声明如下:var computerLands=[];然后我推送()。我如何确保它是空的,有什么区别?当然
var index=computerHand.indexOf(computerHand[I]);
只会导致
index==I
(除非可以重复输入)
function computerTurn() {                                   
     untapAll("computer");
     drawCards(1, "computer");
     for (var i = 0; i < computerHand.length; i++) {             
          if (computerHand[i].type === "land") {
             var container = document.getElementById("computerLandsContainer");
             var newItem = document.createElement("div");                               
             newItem.id = computerLandsID;
             computerLandsID++;
             newItem.style.backgroundImage = "url("+computerHand[i].image+")";
             newItem.style.backgroundSize = "100%";
             var btn1 = document.createElement("button");
             btn1.id = "tapButtonComputer";                                              
             btn1.innerText = "˜";
             newItem.appendChild(createEnlargeButton(newItem,"computer"));
             newItem.appendChild(btn1);
             container.appendChild(newItem);
             computerLands.push(computerHand[i]);
             console.log("Computer plays: " + computerHand[i].name);
             computerLands[computerLands.length - 1].id = newItem.id;
             var index = computerHand.indexOf(computerHand[i]);
             computerHand.splice(index,1);
             break;
             }
      }
 }
computerLands.push(computerHand[i]);
var index = computerHand.indexOf(computerHand[i]);
computerHand.splice(index,1);
function populateComputerLands() {
    for (var i = 0; i < 4; i++) {
        //computerLands.push(availableComputerCards[0]);    <--- old code

        var objectToCopy = availableComputerCards[0];      // new code
        var newObject = Object.create(Object.getPrototypeOf(objectToCopy));
        var newObjectProperties = Object.getOwnPropertyNames(objectToCopy);
        var propertyName;
        for (var p in newObjectProperties) {
            propertyName = newObjectProperties[p];
            Object.defineProperty(newObject, propertyName, Object.getOwnPropertyDescriptor(objectToCopy, propertyName));
        };
        computerLands.push(newObject);
    }
}