me gusta usar la siguiente sintaxis para comprobar porque es fácil de leer, escribir menos y casi atado como el método más rápido:
if ("@style" in item) // do something
Para asignar un valor a ese atributo cuando Don sé el nombre de ella antes de mano utilice el método attribute
:
var attributeName:String = "style";
var attributeWithAtSign:String = "@" + attributeName;
var item:XML = <item style="value"/>;
var itemNoAttribute:XML = <item />;
if (attributeWithAtSign in itemNoAttribute) {
trace("should not be here if attribute is not on the xml");
}
else {
trace(attributeName + " not found in " + itemNoAttribute);
}
if (attributeWithAtSign in item) {
item.attribute(attributeName)[0] = "a new value";
}
Todas las maneras siguientes son para probar si un atributo existe obtenida de las respuestas que aparecen en este ques ción. Como había tantos, ejecuté cada uno en 11.7.0.225 jugador de depuración. El valor a la derecha es el método utilizado. El valor de la izquierda es el tiempo más bajo en milisegundos que se tarda al ejecutar el código un millón de veces. Aquí están los resultados:
807 item.hasOwnProperty("@style")
824 "@style" in item
1756 [email protected][0]
2166 (undefined != [email protected]["style"])
2431 (undefined != item["@style"])
3050 XML(item).attribute("style").length()>0
Rendimiento Código de ensayo:
var item:XML = <item value="value"/>;
var attExists:Boolean;
var million:int = 1000000;
var time:int = getTimer();
for (var j:int;j<million;j++) {
attExists = XML(item).attribute("style").length()>0;
attExists = XML(item).attribute("value").length()>0;
}
var test1:int = getTimer() - time; // 3242 3050 3759 3075
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = "@style" in item;
attExists = "@value" in item;
}
var test2:int = getTimer() - time; // 1089 852 991 824
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != [email protected]["style"]);
attExists = (undefined != [email protected]["value"]);
}
var test3:int = getTimer() - time; // 2371 2413 2790 2166
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = (undefined != item["@style"]);
attExists = (undefined != item["@value"]);
}
var test3_1:int = getTimer() - time; // 2662 3287 2941 2431
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = item.hasOwnProperty("@style");
attExists = item.hasOwnProperty("@value");
}
var test4:int = getTimer() - time; // 900 946 960 807
time = getTimer();
for (var j:int=0;j<million;j++) {
attExists = [email protected][0];
attExists = [email protected][0];
}
var test5:int = getTimer() - time; // 1838 1756 1756 1775
comprobar mis respuestas al final. ¡Creo que es lo que has estado buscando! :) – Rihards