Prev: FAQ Entry Proposal: What is (function(){ /*...*/ })() ?
Next: FAQ Topic - What is Ajax? (2010-03-01)
From: Gregor Kofler on 1 Mar 2010 12:46 lorlarz meinte: > David, > > I don't think you know how well jQuery is doing. I'm pretty sure he knows. > It is by far the > most used JS library and has had and continues to have the fastest > growth. Moreover, jQuery is now used somewhere in a full 20% of > web sites on the Earth. > > We must stay critical about it. But, while other libraries may be > failing, from any use standpoint, jQuery is not. And? You should know by now, that there is no relation between code quality and widespread use. (After all Internet Explorer 6 is still the most popular browser on this planet's face...) Zillions of web pages claim to be XHTML 1.0 strict - hardly anyone really is. Bottom line: Most web authors are quite incompetent when it comes to web authoring, and they are *completely* clueless when it comes to browser scripting. Tthat's why the resort to some library or - frequently - a bunch of them (I once had to work on a site sporting jQuery, Spry and mootools plus "plugins" and "extensions"; it was "leaking badly"). Gregor -- http://www.gregorkofler.com
From: lorlarz on 1 Mar 2010 12:50 On Mar 1, 11:11 am, lorlarz <lorl...(a)gmail.com> wrote: > On Mar 1, 10:22 am, lorlarz <lorl...(a)gmail.com> wrote: [snip] > > > The problems I would _really_ like to see addressed are what > > JSLInt saw as *big problems* and I did not correct, but rather > > commented out to even get through jQuery 1.4.2 with JSLint . > > Below are the 3 bits of code I had to comment out.: > > > The block I had to comment out: (all line no. now refer to > > development > > version of jQuery 1.4.2 , as provided byhttp://jquery.com): > > > lines 2663 to 2673 > > > /* while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { > > soFar = m[3]; > > > parts.push( m[1] ); > > > if ( m[2] ) { > > extra = m[3]; > > break; > > } > > } > > */ > > > and > > > line 4167: > > > // replace(/=([^="'>\s]+\/)>/g, '="$1">') > > > and > > > line 4775: > > > // jsre = /=\?(&|$)/, > > > How big are these problems? Can they be viewed as benign? > > I sure do NOT know.- Hide quoted text - > > > - Show quoted text - > > P.S. To my above quoted post (sorry): > > The things of concern to me among the remaining 'errors' in the > JSLint > report, these seem to be the most worrisome: > > 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 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 5052 character 41: Bad operand. > > if ( s.global && ! jQuery.active++ ) {- Hide quoted text - > I really wrongly 'fixed' lines 2985 and 2995: They should have been fixed to read: part = part.toLowerCase(); var nodeCheck = part; I though this might cure the 'nodeCheck' used out of scope JSLint error but it did not. Still, people should change the fix for lines 2985 and 2995 and rerun JSLInt via http://jslint.org to see a possibly truer error list -- I.E. since I really made a wrong 'correction' before. Also, of course, the three things I had to comment out to get jQuery 1.4.2 all the way through JSLint may have wrongfully created an error by JSLint. This may irritate people, but after fixing my wrong fix, here is the JSLint 'error' list (recall 3 commented out areas may still have falsely caused problems, but at least now nothing else would do that). UPDATE: JSLint remaining 'errors': 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 1 Mar 2010 12:57 On Mar 1, 11:46 am, Gregor Kofler <use...(a)gregorkofler.com> wrote: > lorlarz meinte: > > > David, > > > I don't think you know how well jQuery is doing. > > I'm pretty sure he knows. > > > It is by far the > > most used JS library and has had and continues to have the fastest > > growth. Moreover, jQuery is now used somewhere in a full 20% of > > web sites on the Earth. > > > We must stay critical about it. But, while other libraries may be > > failing, from any use standpoint, jQuery is not. > > And? You should know by now, that there is no relation between code > quality and widespread use. (After all Internet Explorer 6 is still the > most popular browser on this planet's face...) > > Zillions of web pages claim to be XHTML 1.0 strict - hardly anyone > really is. Bottom line: Most web authors are quite incompetent when it > comes to web authoring, and they are *completely* clueless when it comes > to browser scripting. Tthat's why the resort to some library or - > frequently - a bunch of them (I once had to work on a site sporting > jQuery, Spry and mootools plus "plugins" and "extensions"; it was > "leaking badly"). > > Gregor > > --http://www.gregorkofler.com This might make a lot of JS people here mad, but I _want_ to use jQuery. I just want to have all assurance or reasonable quality control. At the very least, jQuery is very close to OK. I just really want to know if there are any _real_ errors that make things work wrong.
From: Matt Kruse on 1 Mar 2010 13:08 On Mar 1, 11:57 am, lorlarz <lorl...(a)gmail.com> wrote: > This might make a lot of JS people here mad, but I _want_ to use > jQuery. I just want to have all assurance or reasonable > quality control. At the very least, jQuery is very close to > OK. I just really want to know if there are any _real_ errors > that make things work wrong. The real problems with jQuery can't be found by JSLint, because they are logic and algorithm problems. This simply attempt to solve the problem in the wrong way. Even if the syntax was correct and passed JSLint 100%, the logic would still be in error. The question of whether or not to use jQuery is a cost/benefit analysis. Sadly, most people using it (IMO) over-estimate the benefit and are not even capable of understanding the cost. Which is not to say that you cannot understand each and still decide to use jQuery. I do. In some situations, for some tasks. Matt Kruse
From: lorlarz on 1 Mar 2010 13:45
On Mar 1, 11:50 am, lorlarz <lorl...(a)gmail.com> wrote: > On Mar 1, 11:11 am, lorlarz <lorl...(a)gmail.com> wrote: > > > > > > > On Mar 1, 10:22 am, lorlarz <lorl...(a)gmail.com> wrote: [snip] You may be interested to know that in response to this JSLint barrage (which I have also contacted John Resig personally about), John has decided to make a couple of changes and is considering making a couple (or some) others. The following links, provided by J. Resig supposedly have something to do with 2 changes made so far: http://github.com/jquery/jquery/commit/a18f682012ae8e63f3b43b39375b3c5ce0a561e3 http://github.com/jeresig/sizzle/commit/89dd2b35d51693f46b2043149243920b380ad474 He also said he has one thing to investigate and another he is unsure of. Also: It is also noteworthy that at least one of the errors cited by JSLint was seen as a real error _needing_ fixing. John Resig encourages people to keep up on any changes by getting the most recent release always: http://code.jquery.com/jquery-nightly.js I shall not pass any judgement on any of this. |