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:下面是一个例子,说明我的意思:alternativehasOwnProperty
函数在这里不合适(通常非常糟糕),如果构造函数属性指向错误的对象(这是非常常见的),或者[[Prototype]]
链上有多个对象(而不是null
),它将失败。更好的替代方法是,在这种情况下,它会给出相同的结果(当然不是针对不可枚举的属性),对于缺少hasOwnProperty
@bradcristie的旧Safari版本,这是常见的解决方案。没关系,这不是你的函数。:-)我的对象也是可变的,所以我不知道有多少个。那么我应该告诉每个对象(当它被创建时)要将自身添加到objs数组中?您可以这样做,是的。假设objs
(在本例中)是全局范围,您可以放置objs.push(此)
在对象构造中维护已生成对象的列表。@cocoacoder:下面是一个例子,说明我的意思:alternativehasOwnProperty
函数在这里不合适(通常非常糟糕),如果构造函数属性指向错误的对象(这是很常见的),或者在[[Prototype]]
链上有多个对象(除了null
),这也是很常见的,那么它将失败。一个更好的替代方法是,在这种情况下,它会给出相同的结果(但对于非枚举器则不会)