0

我在操作脚本 3.0 上遇到了数组问题,我在 adobe 页面上阅读过,我可以检查两个 var 是否具有相同的信息。

var num1:Number = new Number(1);
var num2:Number = new Number(1);

trace(num1 == num2); 
// true in ActionScript 3.0, false in ActionScript 2.0

trace(num1 === num2); // true in ActionScript 3.0, false in ActionScript 2.0

I tried to do a condition based on that, this is basically my code

var sol:Array= new Array();

sol.push("a");

sol.push("b");

sol.push("c");

var letters:Array= new Array();

sol.push("a");

sol.push("b");

sol.push("c");

btngo_mc.addEventListener(MouseEvent.CLICK ,goshow);

function goshow (event:MouseEvent):void{


    if(trace(sol===letters) ==true ){

        gotoAndPlay("win");

    }else {

        gotoAndPlay("lose");

    }

}

第一个问题是跟踪(sol === 字母)给我发送了一个 false 值。

第二个问题是我认为我的条件不起作用,我尝试了另一个给我发送真实价值的条件,它一直让我“输”。

我真的很感谢您花在阅读这篇文章上的时间,并祝您度过愉快的一周。

4

2 回答 2

1

在您的示例中,您正在创建两个单独的数组对象。

var sol:Array= new Array();&var letters:Array= new Array();

不管数组的内容如何,​​它们总是不同的对象,因此永远不会评估为相同的。 sol == letters将始终返回 false,因为它们被实例化为两个不同的对象。


第二部分 if(trace(sol===letters) ==true )

您在这里评估的是跟踪函数的返回值。由于 trace 返回 void (我相信),这将始终评估为 false (无论您传递给 trace.


您可能想要做的是评估数组的内容,而不是数组本身。这是一个解决该问题的问题: ActionScript Comparing Arrays

于 2013-05-03T18:22:45.757 回答
0

正如评论和另一个答案中所建议的,您正在比较两个对象,而不是它们的内容。

这是一个您可以使用的函数以您想要的方式比较两个数组的内容:

function arraysMatch(first:Array, second:Array):Boolean
{
    if (first.length == second.length)
    {
       for (var index:int = 0;index < first.length;index++)
       {
           if (first[index] != last[index])
              return false;
       {
       return true;
    }
         else
             return false;

}
// usage

if (arraysMatch(first,second))
{
   // arrays have matching contents
   // do something 
 }
于 2013-05-03T18:34:10.100 回答