I have posted about this before and really have never found a good solution for it. Things just don't work right and there is inconsistency between iPhone and Android.
First off, hasOwnProperty crashes hard. So that's out.
Here is what I am using to test. i'm sure it could be more elaborate but tit's after 4AM so forgive me..
Ti.API.info('--- TITLE (test #1) ---'); Ti.API.info('title' in win1); Ti.API.info(typeof win1.title); Ti.API.info(win1.title); Ti.API.info('--- ID (test #2) ---'); Ti.API.info('id' in win1); Ti.API.info(typeof win1.id); Ti.API.info(win1.id); Ti.API.info('--- ASDF (test #3) ---'); Ti.API.info('asdf' in win1); Ti.API.info(typeof win1.asdf); Ti.API.info(win1.asdf); Ti.API.info('--- ID (test #4, after set)---'); win1.id = 'hello'; Ti.API.info('id' in win1); Ti.API.info(typeof win1.id); Ti.API.info(win1.id);Problem is...
1) iPhone always reports true for the in test.
2) I can't find a single good way to see if the property is legit on either platform... for example id. If id has not yet been set, both iPhone and Android will report "undefined" for typeof win1.id. Okay that's fine because it's not defined yet....... but how can I detect if it will accept setting that property?
3) For a property not yet set or a property that does not exist, Android returns "undefined"... iOS returns null.
All I want to be able to test for is does this property exist on a UI element. I can not find any way to do this successfully. And I think it should have consistent behavior.
Here is the output...
I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1126,4727] --- TITLE --- I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [2,4729] true I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4730] string I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [4,4734] Tab 1 I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4735] --- ID --- I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4736] false I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [2,4738] undefined I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4739] undefined I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4740] --- ASDF --- I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4741] false I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [4,4745] undefined I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4746] undefined I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [3,4749] --- ID (after set)--- I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [2,4751] true I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [2,4753] string I/TiAPI ( 676): (kroll$2: file:///android_asset/Resources/app.js) [1,4754] hello
[INFO] --- TITLE --- [INFO] 1 [INFO] string [INFO] Tab 1 [INFO] --- ID --- [INFO] 1 [INFO] undefined [INFO] <null> [INFO] --- ASDF --- [INFO] 1 [INFO] undefined [INFO] <null> [INFO] --- ID (after set)--- [INFO] 1 [INFO] string [INFO] hello