Very cool. Captured as http://wiki.openlaszlo.org/CheckingPropertyExists
On May 8, 2006, at 6:41 AM, P T Withington wrote:
> [I'm not lecturing Neil, just happened to reply to his message in
> this thread as an entree in to discussing how we check for the
> existence of a property in Javascript.]
>
> The 'correct' way to ask if a property exists is the `in` operator
>
> if ('bar' in foo)
>
> which unfortunately is not currently supported in our compiler
> (http://www.openlaszlo.org/jira/browse/LPP-969). If you know that
> the property is an immediate property (not inherited from the
> superclass) then you can ask:
>
> if (foo.hasOwnProperty('bar'))
>
> Because we do not support the `in` operator, the compiler currently
> does not warn if you ask for a non-existent property using the
> index operator:
>
> if (foo['bar'])
>
> but as Adam has said, that is a bad idiom that we ought to purge.
> The whole point of the 'undefined' warnings is to help you debug
> your code. Someday we will need to turn on warnings for that (and
> have a whole raft more warnings to clean up). (http://
> www.openlaszlo.org/jira/browse/LPP-2030)
>
> We also should distinguish between a non-existent property and a
> property whose value is `undefined`. In earlier swf runtimes, this
> was not possible, but we could do that now. (http://
> www.openlaszlo.org/jira/browse/LPP-2031)
>
> The compiler will also not warn for a non-existent property if you
> take `typeof` an non-existent property, so this test:
>
> if (typeof foo.bar != 'undefined')
>
> is another way to check. The intent is that you would not just
> check that the property was defined, but check that it is of the
> correct type. Since you are checking, any warning would be
> superfluous.
>
> By extension, the compiler ought not warn if you ask `foo.bar
> instanceof <class>`, or as you suggest `foo.bar == void 0`[1]. But
> that just creates more idioms we will eventually need to fix. I
> suggest we stick with the two idioms we have for now and elevate
> the priority of LPP-969.
>
> ---
> [1] See (http://pt.withy.org/ptalk/archives/2005/06/
> dont_assume_undefined_is_undefined.html) for why I say `void 0`
> rather than `undefined`.
>
>
> On 2006-05-08, at 00:58 EDT, Neil Mix wrote:
>
>> Is contextual checking possible here? I do a lot of this:
>>
>> if( foo.bar == null ) ...
>>
>> which of course can generate "WARNING: reference to undefined
>> property 'bar'". Well duh, that's why I'm checking. On the other
>> hand, once or twice I've been save by warnings from:
>>
>> var x = foo.bar + baz;
>>
>> I suspect that if the warnings are optional, I'll just get in the
>> habit of using a lot of the first example. In turn, this means
>> that when I decide to use the optional warnings to track down and
>> instance of the second example I'll drown in a flood of red
>> herrings. This is where a little bit of contextual smarts would
>> be nice. If that's even reasonably possible...
>>
>> On May 7, 2006, at 7:47 PM, P T Withington wrote:
>>
>>> Looks good, but what is 'hasAttribute'? Do you mean hasOwnProperty?
>>> (Or 'in', but we don't permit 'in').
>>>
>>> The idiom we use for testing the existence of a property without
>>> getting a warning is this['prop'] -- the debugger does not warn
>>> on that.
>>>
>>> But perhaps we should be working on ERROR's first, not
>>> WARNING's. It
>>> is not an error in Javascript to reference a non-existent property,
>>> we only have a warning to help people debug. Maybe I should make
>>> that warning optional.
>>>
>>> On 2006-05-07, at 17:56 EDT, Benjamin Shine wrote:
>>>
>>>>
>>>> Tucker, I have risen to approximately 1% of your challenge. If
>>>> these fixes are in the right vein, I'll keep going.
>>>>
>>>> Change 42100 by [EMAIL PROTECTED] on 2006/05/07 14:49:36
>>>> *pending*
>>>>
>>>> Summary: Eliminating a few warnings in LaszloCanvas.as
>>>> instantiation.
>>>>
>>>> New Features:
>>>>
>>>> Bugs Fixed:
>>>>
>>>> Technical Reviewer: ptw (pending)
>>>> QA Reviewer: frisco (pending)
>>>> Doc Reviewer: (pending)
>>>>
>>>> Documentation:
>>>>
>>>> Release Notes:
>>>>
>>>> Details:
>>>> This change eliminates the following runtime errors and
>>>> warnings, when I run http://localhost:8087/lps-legals/test/lztest/
>>>> lztest-simple.lzx?debug=true
>>>> 07 May 2006 14:21:26 (127.0.0.1 2) INFO
>>>> responders.ResponderEVAL – CLIENT_LOG ERROR: views/LaszloCanvas.as:
>>>> 256: undefined object does not have a property ‘sendEvent’
>>>> 07 May 2006 14:21:26 (127.0.0.1 1) INFO
>>>> responders.ResponderEVAL – CLIENT_LOG WARNING: views/
>>>> LaszloCanvas.as:256: reference to undefined property
>>>> ‘onpercentcreated’
>>>> 07 May 2006 14:21:26 (127.0.0.1 3) INFO
>>>> responders.ResponderEVAL – CLIENT_LOG WARNING: views/
>>>> LaszloCanvas.as:258: reference to undefined property ‘initdelay’
>>>> 07 May 2006 14:21:26 (127.0.0.1 4) INFO
>>>> responders.ResponderEVAL – CLIENT_LOG WARNING: views/
>>>> LaszloCanvas.as:308: reference to undefined property ’LZlateinit’
>>>>
>>>> Tests:
>>>>
>>>> Affected files ...
>>>>
>>>> ... //depot/lps-legals/WEB-INF/lps/lfc/core/LzNode.as#7 edit
>>>> ... //depot/lps-legals/WEB-INF/lps/lfc/views/LaszloCanvas.as#5 edit
>>>> ... //depot/lps-legals/lps/utils/lztestmanager.lzx#2 edit
>>>>
>>>>
>>>> <changeset-42100.zip>
>>>>
>>>> benjamin shine
>>>> software engineer
>>>> [EMAIL PROTECTED]
>>>>
>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> Laszlo-dev mailing list
>>> [email protected]
>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>>
>
benjamin shine
software engineer
[EMAIL PROTECTED]
_______________________________________________
Laszlo-dev mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-dev