[备忘] AS3 if 判断的陷阱

AS3的 if 判断陷阱很多, 工作中浪费了很多时间, 在 zrong 的帮助下, 整理了这个blog备忘!

总的来说, 除了Boolean类型, 其它类型的undefined, null 这两种情况作为 false 逻辑的, 其它情况为true逻辑.

陷阱一: 判断xml中是否有某个字段

陷阱case:

var xml:XML = <a></a>;

if ( xml.someNOTExistField ) { //这个居然也为真!! 要知道someNOTExistField 这个是没有定义的

               //下面的trace显示, xml.someNOTExistField 是一个 XMLList类型
                trace("xml.someNOTExistField class="+getQualifiedClassName(xml.someNOTExistField));
}

解决方法:

if( xml.someNOTExistField != undefined ){}

问题分析:

感觉AS3编译器, 对于 左值和 右值 没有完全区分开.

a=b;  这种情况 a为左值, b为右值. 常见语言的语法左值a会改变, 而右值b是只读的. 针对 上面的case

将 xml.someNOTExistField 放在 if 语句内作判断应该是右值, 不应该创建一个新的XMLList

只有  xml.someNOTExistField=<b></b>; 做左值时, 自动创建一个新的XMLList才是合理的

 

陷阱二: 判断Function是否已经赋值

陷阱case:

var afunc:Function = testFunc;//testFunc是一个已经声明并且实现的函数, 略去

if( afunc != null ){ //如果直接用 if( afunc )来判断, 编译器会有警告, 所以不考虑那种情况

   //这个判断逻辑具体不行!!!, 代码运行不到此行!

}

解决方法:

if( afunc is Function ){} //这样就行了

或是将Flex SDK升级到 4.5.1 重新编译代码后,(target设置为 >=10.1, Flex4.5.1 default target是10.2) 再运行
if( afunc != null ){} 就是 true了

问题分析:

AS3编译器, 将 afunc != null 解释为:  afunc() != null, 就是说没有括号也算是函数调用.

感觉AS3编译器细节处还在动态语言特性和强数据类型之间游离!  没有()就应该不能算是调用函数呀!!

可喜的是: 最新的FlexSDK4.5.1中的compc已经将这个问题改正了

 

陷阱三: 中括号会引起运行时错误

陷阱case:

var myobj:MyClass = new MyClass();//myClass是一个自定义的类

if ( myobj["someNOTExistField"] ){}   //因为myobj.someNOTExistField会在编译时就会报错, 不考虑那种情况

这个判断会抛出: ReferenceError: Error #1069

解决方法:

对于MyClass这种静态类, 还是不要用[]这种形式, 如果直接是一个Object对象就可以了, 因为Object是一个动态类

问题分析:

我不得不再次说AS3有点怪, Object类是一个动态类, 但是如果你 class MyClass extends Object, 这个MyClass却不是动态类! 如果想声明动态类,需要用 dynamic class. 不过adobe不推荐你自定义动态类, 因为有性能问题. 我想可能adobe对Object这个类的动态性做了优化吧!



陷阱四: String和Boolean的转换

陷阱case:

var strBoolean:String = "false";
if (strBoolean) {//因为strBoolean这个变量不是 null, 也不是 undefined, 所以为 true
    trace("注意: 这个逻辑为 真");
}
if (new Boolean("")) {//Boolean的构造函数的参数是 null, undefined, "",时, 这个Boolean就是false
    trace("注意: 这个逻辑为 否");
}

if (new Boolean("false")) { //只要构造函数的参数不是 null, undefined, "", 这个Boolean就是true
    trace("注意: 这个逻辑为 真");
}

if (Boolean("false")) {//相当于调用Boolean的构造函数
    trace("注意: 这个逻辑为 真");
}

if ("true" as Boolean) { //因为字符串永远不可能为 Boolean数据类型, 所以逻辑永远为 否
    trace("注意: 这个逻辑为 否");
}



解决方法:

var someStr:String = xxxxx;

if( "true" == someStr ){}   或是

if( "false" != someStr ){}

问题分析:

AS3的Boolean构造其实不认String的 "true" 和 "false", 只认 "", 和非"".

 

陷阱五: String的逻辑判断需要注意  空字符串

陷阱case:
private function test(s:String):void {
    if (s) { //这里的判断需要考虑 空字符串 的情况
        trace("do something["+s+"]");
    }
}


var str:String;
test(str);

str = null;
test(str);

str=""; //空字符串, 在业务上也是可能出现的
test(str);

str="hello"
test(str);//只有这个会 true

解决方法:

private function test(s:String):void {
    if ( "true" == s) { //不变的法则
        trace("do something["+s+"]");
    }
}

问题分析:

这个和陷阱四本质上是一回事

 

陷阱六: XML中的true和false

陷阱case:

var xml:XML = <a><f>false</f></a>;
trace("getQualifiedClassName(xml.f)="+getQualifiedClassName(xml.f));//print XMLList
trace(xml.f);//print false

var v:Boolean = xml.f;
trace("v=" + v);//此处print为false,实为凑巧

if (xml.f) {
    trace("注意: 处理为 真");
}


解决方法:

if( "true" == xml.f ){}   或是

if( "false" != xml.f ){}

问题分析:

xml.f 本质是一个XMLList, 无从谈起 逻辑, XML内容的本质都是String.

因为业务逻辑的判断只关心 "true" 或是 "false".



smithfox | Friday 01 July 2011 at 1:28 pm | | UI       

seven comments

huang.xinghui

陷阱二问题:

试了下是可以通过!=null来判断的,用的是SDK3.5 测试代码:
var afunc:Function = asdf;
if (afunc != null)
{ trace(“afunc”, true);
}
else
{ trace(“afunc”, false);
}
private function asdf():void
{
}

huang.xinghui, - 14-07-’11 18:23
smithfox

谢谢你用SDK3.5测试,我当时是用SDK4.1, 那可很能是 SDK4.1独有的问题.

其实这个问题值得探讨,哪种方式是最安全和标准的? 因为在SDK 源代码中用很多地方是用 (f is Function)来判断的。 比如很核心的 mx.utils.XMLNotifier

smithfox, (URL) - 14-07-’11 19:40
Best iPhone 6 Plus Waterproof Cases

Another rumour circulating the web is that the iPhone 7 will come with a new iPhone charger, with a Lightning connector on one end and a new reversible USB connector on the other end.

Best iPhone 6 Plus Waterproof Cases, (URL) - 04-06-’15 14:45
franchise de nettoyage  Montreal

franchise de nettoyage ,service de femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise saura réaliser pour
ous l’ensemble des travaux ménagers.
G.E.M. s’engage surr une prestation de qualité ! franchise de nettoyage
Notre équipe de spécialistes chevronnés accomplira un travail à la fois soigné, rapide et économique.

De plus, nous utilisons exclusivement des produits écologiques et hautement performants, issus des
toutes dernières technologies.
La vie moderne véhicule aussi dde loures menaces. D’apparence inoffensive, meubles, appareils ménagers, matériaux
de construction, jouets ou objets familiers peuvent dégager des phtalates ou autres redoutables composés chimiques.

entretien ménager résidentiel, franchise de nettoyage
Franchise dde Nettoyage Résidentiel et Commercial, service de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel,
service d’entretien ménager montréal
Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères à devenir des professionnels du nettoyage commercial et
de la maintenance. En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage concurrentiel aknsi que d’une aide apportée par un modèle d’affaires éprouvé
vous assurant de travailler avec un leader du domaine disposant dee l’expérience et la stabilité.

Vous disiez augmentez vos revenus afin d’améliorer votre
quotidien ? Faites Appel a G.E.M Ménage! service de femme de ménage ,entretien ménager commercial,entretien ménager
commercial, ménage résidentiel, service d’entretien ménager montréal,
service de femme de ménage ,entretien ménager
commercial,entretien ménager commercial, ménage résidentiel,
service d’entretien ménager montréal
Frachises de Nettoyage Résidentiel et Commercial disponible Partout A Montréal ,Rive Nord eet Rive Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est obligatoire

Un Investissement dee 24 000$ Vous Rapporte (4800$ et plus de Revenus par Mois)!

Matériel et formation fourni

Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères à devenir des professionnels duu nettoyage commercial et de la maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage concurrentiel
ainsi que d’une aide apportée paar un modèle d’affaires
éprouvé vous assurant de travailler avec un leader du domaine disposant de l’expérience et la stabilité.

G.E.M Ménage vous offre l’opportunité de travailler pendant lla journée de lundi a vendredi .

G.E.M Vouus propose des cotrats d’entretien ménager avec
des horaires souples et un revenu garanti.

Pour les personnes libres,les nouveaux arrivants ou
les sans-emplois G.E.M peut favoriser votre accès au marché duu travail !

G.E.M vous propose des contrats stables eet rémunérateurs!

Dans le secteur résidentiel idéal pour un couple, oou un homme seul dans le secteur commercial
Vous débuter des maintenant

Des techniques eet méthodes de travail éprouvées.

Une aide à la constitution oou à l’enregistrement
de leur entreprise.
Des territoires d’exercice protégés.
Entreprise clés en main.
Un garantie qqui protège votre investissement

Exigences de l’entrée de notre réseau :
Les demandes sot examinées attentivsment et une enquête relative à la
candidature est menée.
Les candidats doivent passer une entrevue de sélection.
Avwnt tout début d’activité, les canddidats doivent assister à
des sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés puisssent offtrir
à leurs clients un service professionnel d’une qualité supérieure à
celle de la concurrence.
Franchise disponible au résidentielet commercial

N’hésitez pas à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

franchise de nettoyage Montreal, (URL) - 01-08-’17 09:28
ménage commercial Boucherville

le spécialiste du Grand Ménage commercial à Montréal.

Nous vous offrons la gamme la plus complète du grand ménage commercial à
Montréal, Rive Nord et Rive Sud, et nous réajustons nos services à vos besoins.

Notre service couvre différends secteurs d’activité: Restaurants CPE et Garderies Privés Cliniques et Milieux Hospitaliers Concessionnaires automobiles Centres de Conditionnement Physiques Institutioons Publiques ett Ecoles
Compagnie entretien ménager
Faites-nous confiance, nnous nous occupons de tout !

Que ce soit au travail ouu à la maison, la propreté générale de l’environnement peut affecter votre santé,
aionsi que celle de votre entourage. C’est pourquoi un entretien soigné et régulier est
nécessaire pour assurer efficacement la salubrité optimale du domicile ou de
l’espace de travail.entretien ménager commercial ,entretien ménager commercial Brossard, entretoen ménager commercial Longueuil
Compagnie de nettoyage
Si faire lee temps vous manque pour faire un grand-ménage il
est tenps d’appelerG.E.M ménage, notre compagnie de professionnels de nettoyage !

Il n’est pas nécessaire de faire un grand ménage de toute la maison pour avoir recoure à nos services, nous disposons aussi d’équipes de ménage professionnel et d’experts en nettoyage pour des plus ptits
projets spécifiques comme laver les vitres,
laverr les tapis, laver les murs seulement, lles divans ou, nwttoyer lees conduits de ventilation.

Compagnie d’entretien ménager
G.E.M ménage uune commpagnie d’entretien ménager professionnel, spécialisée en grand-ménage, commercial, résidentiel et industriel spécialisée dans le grand-ménage àMontréal.

Rien n’est plus motivant pour noos intervenantes que de savoir un client satisfait du travail accompli.

Pourquoi faire appel à une multitude d’intervenants alors
que vous pouviez confier à G.E.M la réalisation de
toutes ces tâches ménagères ? Renseignez-vous sur notre forfait dde
45 dollars pour le premier service régulier ! Regroupez la
réalisation de ces travaux chez un seul prestataire ! Pour votre plus grande satisfaction, faitess dee G.E.M votre unique intervenant qui
pourra assurer tout au lon de l’année la continuité d’un service de haute qualité
et à la carte ! Entretien ménager résidentiel, Entretien ménager commercial, Grand ménage
résidentiel et commercial, Lavage dde Vitres, Lavage de tapis, Décapage et Cirage de planchers et Plus.

Les moyens humains mis en œuvre, le nombre de personnes engagées pour la mission, le nivewau de compétences spécifiques,
les amplitudes horaires qui peuvent être demandées sont des critères
dde notre personnel. Afin d’assurer avec professionnalisme l’entretien écologique de vos locaux,
l’ensemble de notre perrsonnel a subi une formation visant à nettoyer efficacement tout en respectant l’environnement :
Connissance de la manipulation et de l’utilisation des produits verts,
Connaître et mettre en œuvre les bons gestes réduisant les consommatjons
d’énergie (eau, électricité…). Sélection d’outils de nettoyage efficaces ett
faibles consommateurs de détergents
Nous offronns uune gamme de services de ménage « à la carte »
tel que ménage après rénovation pour éliminer
la poussière, ménage déménagement pour emménager dans une résidence impeccable,
ou simplement ménage du priontemps résidentiel ou commercial etc…
Compagnie d’entretien ménager résidentiel
Confiez-nous vogre maison pour un nettoyagfe complet à chaque visite.
G.E.M ménage est uneentreprise professionnelle de ménage à domicile.

Notre équipe est constitué professionnelsqui connaissent votre environnement et vos besoins dee ménage résidentiel.
Ce sont des personnes pour qui votre satisfaction est primordiale.

Compagnie d’entretien ménager commercial
Il y a plusieurs avantages à choisir une compagnie de ménage commercial bien gérée avec des équipes spécialisées pour votre
grand ménage : le travail estt mieux fait, de manière effidace et à taux concurrentiels.

Chaque équipe travaille avec dess méthodes équipements et produits efficaces,
pour les tâches spécifiques qu’ils ont à effectuer selon votre ontrat de ménage.

ménage commercial Boucherville, (URL) - 16-08-’17 18:40
entretien ménager résidentiel Et commercial montreal rive nord et rive sud

service de femme de ménage
Professionnelle de l’entretien, notre dynamique
entreprise saura réaliser pour vous l’ensemble des travaux ménagers.

G.E.M. s’engage sur unne prestation de qualité !

Notre équipe de spécialistes chevronnés accomplira un travail à la fois soigné, rapide
et économique.
De plus, nous utklisons exclusivement des produits écologiques et hautement performants, issus des toutes
dernières technologies.
La vie moderne véhicule aussi de lourdes menaces. D’apparence inoffensive, meubles, appareils ménagers, matériaux de construction, jouets ou objets
familiers peuvent dégager des phtalates oou autres redoutables composés chimiques.

Franchise de Nettoyage Résidentiel et Commercial, service de femme de ménage ,entretien ménager
commercial,entretien ménager commercial, ménage résidentiel, service
d’entretien ménager montréal
Nous aions lles personnes désireuses d’être propriétaires d’entreprises prospères à
devenir des professionnels du nettoyage commercial et de la maintenance.
En rejoignant noitre réseau d’entreprises, vouhs bénéficierez d’un avantage concurrentiel
ainsi que d’une aice apportée parr un modèle d’affaires éprouvé vous assurant de travailler avec un leader du domaine disposant de
l’expérience ett la stabilité.
Vous disiez augmentez vos revenus afin d’améliorer votre quotidien ?
Faites Appel a G.E.M Ménage! service de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, servce d’entretien ménager
montréal, service de femme de ménage ,entretien ménager commercial,entretien ménager
commercial, ménage résidentiel, service d’entretienménager montréal
Franchises de Nettoyage Résidentiel et Commercial
disponible Partout A Montréal ,Rive Nord et Rive Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est obligatoire

Un Investissement de 24 000$ Vous Rappirte (4800$ et plus de Revenus par Mois)!

Matériel et formation fourni

Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères à devenir des
professsionnels du nettoyage commercial et de la maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez
d’un avantage concurrentiel ainsi que d’une aide apportée par un modèle d’affaires
éprouvé vous assurant de travailler avec unn leader du domaine disposant
de l’expérience et la stabilité.

G.E.M Ménage vous offre l’opportunité de travaioler pendant la journée de lundi a
vendredi .

G.E.M Vous propose des contrats d’entretien ménager
avec des horaires souples et un revenu garanti.

Pour lles personnes libres,les nouveaux arrivants ou les sans-emplois
G.E.M peut favoriser votre accès au marché du travail !

G.E.M vous propose des congrats stables et rémunérateurs!

Dans le secteur résidentiel idéal pour un couple, ou un homme seul
dans le secteur commercial
Vouus débuter des aintenant

Des techniques et méthodes de travail éprouvées.

Unee aide à la constitution ou à l’enregistrement de leur entreprise.

Des territoires d’exercice protégés.

Entreprise clés en main.
Un garantie qui protège votre investijssement

Exigences dee l’entrée de notre réseau :
Less demandes sont examinées attentivement ett une enquête relative à la csndidature est menée.

Les candidats doivewnt passer une entrevue de sélection.
Avant tout début d’activité, les candidats doivent assister à des sessins de formation.

Au G.E.M. nous nous assurons que nos franchisés puissent
offrir à leurs clients un service professionnnel d’une qualité supérieure à celle de la concurrence.

Franchise displonible au résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talkon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

entretien ménager résidentiel Et commercial montreal rive nord et rive sud, (URL) - 22-08-’17 06:40
femme de ménage montréal

service de femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise saura réaliser pour vous l’ensemble des travaux
ménagers.
G.E.M. s’engage sur une prestation de qualité !

Notre équipe de spécialistes chevronnés accomplira un travail à la fois soigné, rapide et économique.

De plus, nous utilisons eexclusivement des produits
écologiques et hautement performants, issus des toutes dernières technologies.

La vie moderne véhicule aussi de lourdes menaces.
D’apparence inoffensive, meubles, appareils ménagers, matériaux de
construction, jouets ouu ovjets familiers peuvent dégager des phtalates ou
autres redoutables composés chimiques.
entretien ménager résidentiel.G.E.M votre unique intervenant qqui pourra assurer tout au long de
l’année la continuité d’un serviche de hazute qualité et à la carte !

Entretien ménager résidentiel, Entretien ménager commercial, Grand ménage résidentiel et commercial, Lavage de Vitres, Lavage de tapis, Décapage et
Cirage de planchers et Plus.

Franchise de Nettoyage Résidentiel et Commercial, service
de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service d’entretien ménager montréal
Nous aidons lles personnes désireuses d’être propriétaires d’entreprises prospères à devenir des professionnels du nettoyage commercial et de laa maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage
concurrentiel ainsi que d’une aide apportée par un modèle d’affaires
éprouvé vous assurant de travailler avec un leeader du domaine disposant de l’expérience
et la stabilité.
Vous disiez augmentez vos revenus afin d’améliorer votre quotidien ?
Faites Appel a G.E.M Ménage! service de femme de ménage ,entretien ménager
commercial,entretien ménager commercial, ménage résidentiel, service
d’entretien ménager montréal, service de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage
résidentiel, service d’entretien ménager montréal
Franchises de Nettoyage Résidentiel eet Commercial disponible Partoiut A Montréal ,Rive Nord ett Rive Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est oblijgatoire

Un Investissement de 24 000$ Vous Rapporte (4800$ et plus de
Revenus par Mois)!

Matériel et formation fournbi

Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères à devenir des professionnels du nettoyage commercial et de la maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avzntage concurrentiel ainsi que
d’une aidee apportée par un modèle d’affaires éprouvé vous assurant de travailler avec un leader du domaine disposant de l’expérience et
la stabilité.

G.E.M Ménage vous offre l’opportunité de travailler pendant la journée de lundi a vendredi .

G.E.MVous propose des contrats d’entretien ménager avec des horaires souples et uun revenu garanti.

Pouur les personnes libres,les nouveaux arrivants ou les sans-emplois G.E.M peujt favoriser votre accès au marché du travail !

G.E.M vous ppropose des contrats stables et rémunérateurs!

Dans le secteur résidentiel idéal pour un couple, ou un homme seul
dans le secteur commercial
Vous débuter des maintenant

Des techniques et méthodes de travail éprouvées.

Une aide à la constitution ouu à l’enregistrement de leur entreprise.

Des territoireds d’exercice protégés.
Entreprise clés en main.
Un garantie qui protège votre investissement

Exigences de l’entrée dee notre réseau :
Les demandes sont examinées attentivement et une enquête relative à
la candidature est menée.
Les candidats doivent passer une entrevue de sélection.
Avant tout début d’activité, less candidats diivent assister
à des sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés puissemt offror à leurs clients un serice professionnel d’une qualité
supérieure à celle de la concurrence.
Franchise disponible auu résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talpon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

femme de ménage montréal, (URL) - 25-08-’17 07:09
(optional field)
(optional field)
为阻止垃圾广告, 请在提交评论前, 回答一个简单问题(Please answer an simple question)
Remember personal info?
Notify
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.