Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 “中使用eval的替代方案”;至于;_Javascript_Jquery_Html - Fatal编程技术网

Javascript “中使用eval的替代方案”;至于;

Javascript “中使用eval的替代方案”;至于;,javascript,jquery,html,Javascript,Jquery,Html,我使用以下函数动态检查数量可变的对象的属性 // FUNCTION: Check Objects var ObjectsN = 4; function CheckObjects() { for (var i=0; i<=ObjectsN; i++) { if ((eval("Object"+i+".property")==0) { if (i==ObjectsN)

我使用以下函数动态检查数量可变的对象的属性

// FUNCTION: Check Objects
var ObjectsN = 4;
function CheckObjects()
{
        for (var i=0; i<=ObjectsN; i++)
        {
            if ((eval("Object"+i+".property")==0)
            {
                if (i==ObjectsN)
                {
                    alert("Function finished");
                }
            }
            else
            {
                return; // end function
            }
        }
}
//函数:检查对象
var=4;
函数CheckObjects()
{

对于(var i=0;i,当您考虑为变量编号时,请使用数组

没有
Object1
Object2
等。有
[x,y,x]

然后你可以做:

for (var i = 0; i < objects.length; i++) {
    var obj = objects[i];
    if ("property" in obj) {
        // Whatever
    }
}
for(var i=0;i
每当您考虑为变量编号时,请改用数组

没有
Object1
Object2
等。有
[x,y,x]

然后你可以做:

for (var i = 0; i < objects.length; i++) {
    var obj = objects[i];
    if ("property" in obj) {
        // Whatever
    }
}
for(var i=0;i
假设
Object0
Object1
Object2
Object3
Object4
是全局变量

您可以使用
窗口

var ObjectsN = 4;
function CheckObjects()
{
    for (var i=0; i<=ObjectsN; i++)
    {
        if (window['Object'+i].property == 0)
        {
            if (i==ObjectsN)
            {
                alert("Function finished");
            }
        }
        else
        {
            return; // end function
        }
    }
var ObjectsN=4;
函数CheckObjects()
{

对于(var i=0;i假设
Object0
Object1
Object2
Object3
Object4
为全局变量

您可以使用
窗口

var ObjectsN = 4;
function CheckObjects()
{
    for (var i=0; i<=ObjectsN; i++)
    {
        if (window['Object'+i].property == 0)
        {
            if (i==ObjectsN)
            {
                alert("Function finished");
            }
        }
        else
        {
            return; // end function
        }
    }
var ObjectsN=4;
函数CheckObjects()
{

对于(var i=0;i您正在查找的结构是一个。因此,请使用数组存储您的对象:

/* assuming `var Object1 = new Object(), Object2 = new Object();` and so on */
var objs = [ Object1, Object2, Object3 ];
然后,应在迭代时执行属性测试:

for (var o = 0; i < objs.length; o++){
  if (objs[o].hasOwnProperty('property')){
    // Property exists, test its value:
  }
}

您要查找的结构是。因此,请使用数组存储对象:

/* assuming `var Object1 = new Object(), Object2 = new Object();` and so on */
var objs = [ Object1, Object2, Object3 ];
然后,应在迭代时执行属性测试:

for (var o = 0; i < objs.length; o++){
  if (objs[o].hasOwnProperty('property')){
    // Property exists, test its value:
  }
}

与Neverever的答案类似,但传递对全局对象的引用,而不是假设存在可用的
窗口

var ObjectsN = 4;
var CheckObjects = (function(global) {

    for (var i=0; i<=ObjectsN; i++) {
        if ( global['Object' + i].property == 0) {
            if (i == ObjectsN) {
                alert("Function finished");
            }
        } else {
            return; // end function
        }
    }
}
var ObjectsN=4;
var CheckObjects=(函数(全局){

对于(var i=0;i类似于Neverever的答案,但传递对全局对象的引用,而不是假设存在可用的
窗口
对象

var ObjectsN = 4;
var CheckObjects = (function(global) {

    for (var i=0; i<=ObjectsN; i++) {
        if ( global['Object' + i].property == 0) {
            if (i == ObjectsN) {
                alert("Function finished");
            }
        } else {
            return; // end function
        }
    }
}
var ObjectsN=4;
var CheckObjects=(函数(全局){


对于(var i=0;i可变数量的对象,如果JavaScript中只有一个
数组
类型…:P..那么我应该告诉每个对象它应该注册到一个数组中?对于初学者,看一看,而不是使用eval。这就是我要做的。省得使用
eval()
。如果JavaScript中有一个
数组,那么对象的数量是可变的…:P..所以我应该告诉每个对象它应该注册到一个数组中?对于初学者,看一看,而不是使用eval。这就是我要做的。省得使用
eval()
。我还应该包括
if(window['object'+I]&window['object'+I].property==0)
如果对象为空或undefined@andres是的,确实如此,但这取决于OP来进行检查。因此,使用此方法,我不必使用数组?只需添加带括号的窗口,对吗?是的,此解决方案不需要数组。但是,为了最佳实践或可读性,建议使用
array
解决方案。我不擅长评估但是,如果您的变量数量很大(100+),则强烈建议使用
Array
解决方案,如果您正在进行实验/概念验证/调试,则坚持使用
window
I还将包括
if(window['Object'+I]&window['Object'+I]。属性==0)
如果对象为空或undefined@andres是的,确实如此,但这取决于OP来进行检查。因此,使用此方法,我不必使用数组?只需添加带括号的窗口,对吗?是的,此解决方案不需要数组。但是,为了最佳实践或可读性,建议使用
array
解决方案。我不擅长评估但是,要提高JavaScript性能,如果您的变量数量很大(100+),则强烈建议使用
Array
解决方案,如果您正在进行实验/概念验证/调试,则请坚持使用
window
我的对象也是可变的,因此我不知道有多少。那么我应该告诉每个对象吗(创建时)将其自身添加到objs数组?您可以这样做,是的。假设
objs
(在本例中)是全局范围,您可以放置
objs.push(此)
在对象构造中维护已生成对象的列表。@cocoacoder:下面是一个例子,说明我的意思:alternative
hasOwnProperty
函数在这里不合适(通常非常糟糕),如果构造函数属性指向错误的对象(这是非常常见的),或者
[[Prototype]]
链上有多个对象(而不是
null
),它将失败。更好的替代方法是,在这种情况下,它会给出相同的结果(当然不是针对不可枚举的属性),对于缺少
hasOwnProperty
@bradcristie的旧Safari版本,这是常见的解决方案。没关系,这不是你的函数。:-)我的对象也是可变的,所以我不知道有多少个。那么我应该告诉每个对象(当它被创建时)要将自身添加到objs数组中?您可以这样做,是的。假设
objs
(在本例中)是全局范围,您可以放置
objs.push(此)
在对象构造中维护已生成对象的列表。@cocoacoder:下面是一个例子,说明我的意思:alternative
hasOwnProperty
函数在这里不合适(通常非常糟糕),如果构造函数属性指向错误的对象(这是很常见的),或者在
[[Prototype]]
链上有多个对象(除了
null
),这也是很常见的,那么它将失败。一个更好的替代方法是,在这种情况下,它会给出相同的结果(但对于非枚举器则不会)