From: "Michael Haufe ("TNO")" on
On Mar 1, 1:19 am, David Mark <dmark.cins...(a)gmail.com> wrote:

> I'm not big on Mozilla strict mode though.  IIRC, many of its warnings
> are arbitrary (even more so than JSLint).  Complaining about anonymous
> functions that don't return anything comes to mind.

I haven't seen such an issue myself. Take for example:
--------------------------------
function foo1(){}
function foo2(){ return false; }
function foo3(){
if(true)
return 1;
else
return 0;
}
function foo4(){
if(true)
return 1
}

(function(){})();
--------------------------------

The only warning you'll receive is from foo4. I think this is
reasonable. If it was smarter it could flag the anonymous function and
foo1 as useless statements as well which would be reasonable as well
IMO.
From: "Michael Haufe ("TNO")" on
On Mar 1, 2:05 am, "Michael Haufe (\"TNO\")"
<t...(a)thenewobjective.com> wrote:

> The only warning you'll receive is from foo4. I think this is
> reasonable. If it was smarter it could flag the anonymous function and
> foo1 as useless statements as well which would be reasonable as well
> IMO.

s/be reasonable as well/be reasonable
From: David Mark on
Michael Haufe ("TNO") wrote:
> On Mar 1, 1:19 am, David Mark <dmark.cins...(a)gmail.com> wrote:
>
>> I'm not big on Mozilla strict mode though. IIRC, many of its warnings
>> are arbitrary (even more so than JSLint). Complaining about anonymous
>> functions that don't return anything comes to mind.
>
> I haven't seen such an issue myself. Take for example:

It's been a while since I used it. I may be remembering the lint that
runs on Dojo check-ins. It was passable for 99% of their files (once
they were cleaned up and cleared by JSLint, of course), but for the
remainder I had to disable verification with a !strict directive. As an
aside, every time I visit their trac, I see that virtually every
check-in uses !strict, which is self-defeating and what led to the
various typos and other mistakes I found when going through their stuff.
Some people never learn.

> --------------------------------
> function foo1(){}
> function foo2(){ return false; }
> function foo3(){
> if(true)
> return 1;
> else
> return 0;
> }
> function foo4(){
> if(true)
> return 1
> }
>
> (function(){})();
> --------------------------------
>
> The only warning you'll receive is from foo4. I think this is
> reasonable. If it was smarter it could flag the anonymous function and
> foo1 as useless statements as well which would be reasonable as well
> IMO.

Yes, I agree with that.
From: lorlarz on
On Mar 1, 12:04 am, lorlarz <lorl...(a)gmail.com> wrote:
> On Feb 28, 9:09 pm, lorlarz <lorl...(a)gmail.com> wrote:
>
[snip]

For convenience, I thought it would be good to just refer to ONE file
(one document) regarding all the changes I needed to make to get
jQuery 1.4.2 all the way through JSLint **_AND_** the remaining
errors found (in particular, their line numbers) NOW referring to the
SAME jQuery 1.4.2 Development Verson (obtainable from http://jquery.ocm
).

OK. Here it is. Directions: Simply make the following changes to
the Development version of jQuery 1.4.2 :

2649 changed to: var origContext = context || document; // = contents
before = contents removed


lines 2663 to 2673 commented out

2985 changed to: var nodeCheck = part.toLowerCase(); // = part
before = part removed

2995 changed to: var nodeCheck = part.toLowerCase(); // = part before
= part removed



3317 changed to Expr.match[ type ] = new
RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*
\))/.source) ); // parentheses added on expression after + sign


4167 commented out

4775 commented out


5994 prevOffsetParent = offsetParent; offsetParent =
elem.offsetParent; // (comma in middle changed to semi-colon)

6035 checkDiv.style.position = "fixed"; checkDiv.style.top =
"20px"; // (comma in middle changed to semi-colon)

6040 innerDiv.style.overflow = "hidden"; innerDiv.style.position =
"relative"; // (comma in middle changed to semi-colon)

***********************
***********************


**THEN** run that file (documewnt) as so changed through JSLint and
you get the following
error report of remaining errors: (line numbers now referring to lines
in that document):

Error:
Problem at line 16 character 20: Expected an identifier and instead
saw 'undefined' (a reserved word).

(function( window, undefined ) {

Problem at line 38 character 48: Unescaped '-'.

quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

Problem at line 69 character 20: 'hasOwnProperty' is a really bad
name.

hasOwnProperty = Object.prototype.hasOwnProperty,

Problem at line 204 character 20: Use '===' to compare with 'null'.

return num == null ?

Problem at line 330 character 41: Use '!==' to compare with 'null'.

if ( (options = arguments[ i ]) != null ) {

Problem at line 441 character 48: Use '===' to compare with 'null'.

toplevel = window.frameElement == null;

Problem at line 595 character 20: Use '!==' to compare with 'null'.

if ( array != null ) {

Problem at line 599 character 31: Use '===' to compare with 'null'.

if ( array.length == null || typeof array === "string" ||
jQuery.isFunctio...

Problem at line 648 character 18: Confusing use of '!'.

if ( !inv !== !callback( elems[ i ], i ) ) {

Problem at line 648 character 18: Confusing use of '!'.

if ( !inv !== !callback( elems[ i ], i ) ) {

Problem at line 665 character 24: Use '!==' to compare with 'null'.

if ( value != null ) {

Problem at line 713 character 4: Mixed spaces and tabs.

[];

Problem at line 823 character 21: Missing '()' invoking a constructor.

return (new Date).getTime();

Problem at line 913 character 13: 'e' is already defined.

} catch(e) {

Problem at line 1476 character 28: Expected an assignment or function
call and instead saw an expression.

parent.selectedIndex;

Problem at line 1480 character 43: Expected an assignment or function
call and instead saw an expression.

parent.parentNode.selectedIndex;

Problem at line 1592 character 55: 'eventHandle' is already defined.

eventHandle = elemData.handle, eventHandle;

Problem at line 1724 character 106: Missing semicolon.

jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\
\.)?")...

Problem at line 1748 character 25: 'j' is already defined.

for ( var j = pos || 0; j < eventType.length; j++ ) {

Problem at line 1754 character 34: Use '===' to compare with 'null'.

if ( pos == null ) {

Problem at line 1763 character 30: Use '!==' to compare with 'null'.

if ( pos != null ) {

Problem at line 1770 character 48: Use '!==' to compare with 'null'.

if ( eventType.length === 0 || pos != null && eventType.length === 1 )
{

Problem at line 1893 character 26: 'e' is already defined.

} catch (e) {}

Problem at line 1907 character 30: Bad assignment.

event = arguments[0] = jQuery.event.fix( event || window.event );

Problem at line 1919 character 20: 'events' is already defined.

var events = jQuery.data(this, "events"), handlers =
events[ event.type ];

Problem at line 1919 character 60: 'handlers' is already defined.

var events = jQuery.data(this, "events"), handlers =
events[ event.type ];

Problem at line 1989 character 26: Use '===' to compare with 'null'.

if ( event.pageX == null && event.clientX != null ) {

Problem at line 1989 character 51: Use '!==' to compare with 'null'.

if ( event.pageX == null && event.clientX != null ) {

Problem at line 2275 character 19: Use '!==' to compare with 'null'.

if ( data != null || val ) {

Problem at line 2487 character 39: Use '!==' to compare with 'null'.

while ( (type = types[ i++ ]) != null ) {

Problem at line 2516 character 18: Don't make functions within a loop.

});

Problem at line 2525 character 6: Missing semicolon.

}

Problem at line 2632 character 56: Unescaped '['.

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"]
[^'"]*['"]...

Problem at line 2632 character 81: Unescaped '['.

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"]
[^'"]*['"]...

Problem at line 2702 character 21: 'ret' is already defined.

var ret = seed ?

Problem at line 2722 character 26: Use '===' to compare with 'null'.

if ( pop == null ) {

Problem at line 2738 character 23: 'cur' used out of scope.

Sizzle.error( cur || selector );

Problem at line 2745 character 42: Use '!==' to compare with 'null'.

for ( var i = 0; checkSet[i] != null; i++ ) {

Problem at line 2751 character 25: 'i' is already defined.

for ( var i = 0; checkSet[i] != null; i++ ) {

Problem at line 2751 character 42: Use '!==' to compare with 'null'.

for ( var i = 0; checkSet[i] != null; i++ ) {

Problem at line 2798 character 40: 'match' is already defined.

var type = Expr.order[i], match;

Problem at line 2807 character 26: Use '!==' to compare with 'null'.

if ( set != null ) {

Problem at line 2828 character 64: Use '!==' to compare with 'null'.

if ( (match = Expr.leftMatch[ type ].exec( expr )) != null &&
match[2] ) {

Problem at line 2853 character 58: Use '!==' to compare with 'null'.

for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

Problem at line 2858 character 51: Use '!==' to compare with 'null'.

if ( inplace && found != null ) {

Problem at line 2890 character 27: Use '===' to compare with 'null'.

if ( anyFound == null ) {

Problem at line 2910 character 35: Unescaped '-'.

ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,

Problem at line 2911 character 39: Unescaped '-'.

CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,

Problem at line 2912 character 48: Unescaped '-'.

NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,

Problem at line 2913 character 41: Unescaped '-'.

ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)
\3|)\s*...

Problem at line 2914 character 38: Unescaped '-'.

TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,

Problem at line 2915 character 65: Unescaped '-'.

CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,

Problem at line 2916 character 69: Unescaped '-'.

POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,

Problem at line 2917 character 39: Unescaped '-'.

PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\
(\)]*)...

Problem at line 2967 character 29: 'i' is already defined.

for ( var i = 0, l = checkSet.length; i < l; i++ ) {

Problem at line 2967 character 36: 'l' is already defined.

for ( var i = 0, l = checkSet.length; i < l; i++ ) {

Problem at line 2968 character 30: 'elem' is already defined.

var elem = checkSet[i];

Problem at line 2989 character 61: 'nodeCheck' used out of scope.

checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

Problem at line 2999 character 66: 'nodeCheck' used out of scope.

checkFn("previousSibling", part, doneName, checkSet, nodeCheck,
isXML);

Problem at line 3034 character 56: Use '!==' to compare with 'null'.

for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

Problem at line 3120 character 29: Expected an assignment or function
call and instead saw an expression.

elem.parentNode.selectedIndex;

Problem at line 3133 character 20: Wrap the /regexp/ literal in parens
to disambiguate the slash operator.

return /h\d/i.test( elem.nodeName );

Problem at line 3163 character 20: Wrap the /regexp/ literal in parens
to disambiguate the slash operator.

return /input|select|textarea|button/i.test(elem.nodeName);

Problem at line 3203 character 29: 'i' is already defined.

for ( var i = 0, l = not.length; i < l; i++ ) {

Problem at line 3227 character 32: Expected a 'break' statement before
'case'.

node = elem;

Problem at line 3277 character 34: Use '!==' to compare with 'null'.

elem[ name ] != null ?

Problem at line 3284 character 27: Use '===' to compare with 'null'.

return result == null ?

Problem at line 3320 character 6: Don't make functions within a loop.

}));

Problem at line 3339 character 77: Expected an assignment or function
call and instead saw an expression.

Array.prototype.slice.call( document.documentElement.childNodes, 0 )
[0].node...

Problem at line 3354 character 29: 'i' is already defined.

for ( var i = 0; array[i]; i++ ) {

Problem at line 3443 character 34: Missing '()' invoking a
constructor.

id = "script" + (new Date).getTime();

Problem at line 3686 character 1: Unreachable 'window' after 'return'.

window.Sizzle = Sizzle;

Problem at line 3693 character 11: 'slice' is already defined.

slice = Array.prototype.slice;

Problem at line 3699 character 20: Confusing use of '!'.

return !!qualifier.call( elem, i, elem ) === keep;

Problem at line 4114 character 49: Use '!==' to compare with 'null'.

for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {

Problem at line 4131 character 49: Use '!==' to compare with 'null'.

for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {

Problem at line 4320 character 9: Inner functions should be listed at
the top of the outer function.

function root( elem, cur ) {

Problem at line 4320 character 22: 'root' was used before it was
defined.

function root( elem, cur ) {

Problem at line 4424 character 50: Use '!==' to compare with 'null'.

for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {

Problem at line 4492 character 25: 'i' is already defined.

for ( var i = 0; ret[i]; i++ ) {

Problem at line 4513 character 50: Use '!==' to compare with 'null'.

for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {

Problem at line 4628 character 13: Function statements cannot be
placed in blocks. Use a function expression or move the statement to
the top of the outer function.

function getWH() {

Problem at line 4749 character 24: 'name' is already defined.

for ( var name in options ) {

Problem at line 4868 character 24: Use '===' to compare with 'null'.

return val == null ?

Problem at line 5052 character 41: Bad operand.

if ( s.global && ! jQuery.active++ ) {

Problem at line 5238 character 17: 'e' is already defined.

} catch(e) { }

Problem at line 5253 character 17: 'e' is already defined.

} catch(e) {

Problem at line 5276 character 26: 'complete' was used before it was
defined.

function complete() {

Problem at line 5293 character 25: 'trigger' is already defined.

function trigger(type, args) {

Problem at line 5404 character 9: Inner functions should be listed at
the top of the outer function.

function buildParams( prefix, obj ) {

Problem at line 5404 character 29: 'buildParams' was used before it
was defined.

function buildParams( prefix, obj ) {

Problem at line 5423 character 45: Use '!==' to compare with 'null'.

} else if ( !traditional && obj != null && typeof obj === "object" ) {

Problem at line 5444 character 19: Unescaped '-'.

rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,

Problem at line 5531 character 24: Use '===' to compare with 'null'.

} else if ( fn == null || bool ) {

Problem at line 5589 character 31: Use '!==' to compare with 'null'.

if ( opt.overflow != null ) {

Problem at line 5744 character 35: Use '!==' to compare with 'null'.

if ( this.elem[this.prop] != null && (!this.elem.style ||
this.elem.style[t...

Problem at line 5744 character 94: Use '===' to compare with 'null'.

if ( this.elem[this.prop] != null && (!this.elem.style ||
this.elem.style[t...

Problem at line 5816 character 43: Use '!==' to compare with 'null'.

if ( this.options.display != null ) {

Problem at line 5887 character 1: Mixed spaces and tabs.

fast: 200,

Problem at line 5888 character 1: Mixed spaces and tabs.

// Default speed

Problem at line 5889 character 1: Mixed spaces and tabs.

_default: 400

Problem at line 5898 character 60: Use '!==' to compare with 'null'.

if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {

Problem at line 5915 character 15: 'genFx' was used before it was
defined.

function genFx( type, num ) {

Problem at line 6203 character 25: Use '===' to compare with 'null'.

return size == null ? null : this;


From: lorlarz on
On Feb 28, 10:45 pm, David Mark <dmark.cins...(a)gmail.com> wrote:
> lorlarz wrote:
[snip]
>
> Yes, I saw those.  I'll look at them when I have a chance.  But
> basically it indicates what I expected (even after all of these years,
> the code is still hopelessly amateurish).  And I'm not at all surprised
> that Resig is quick to dismiss the results.  That's what he does.
> That's all he does.  And he absolutely will not stop until his project
> is dead.  :)
>
> > I do very much value all your inputs. They are almost always helpful
> > --
> > even when some meaness is thrown in. David Mark did help me.
> > Thanks, David
>
> NP.  Thanks for asking.  It is good to question jQuery.  If more people
> would take the time to do that, perhaps it would fade away.  Take bad
> logic and bad style and authors who clearly won't consider anything but
> their own delusions and you've got a clear candidate for history's bit
> bucket.- Hide quoted text -
>
> - Show quoted text -

David, It my brief communication with John Resig _and_, given the
errors I
found and had to correct to get more than 41% of jQuery 1.4.2 through
JSLint, I do not believe Resig even sent jQuery 1.4.2 through JSLint.

I have emailed him. But if he looks at JSLint results, I believe it
is likely
the run results I provided may well be the first he has seen.