The errata list is a list of errors and their corrections that were found after the product was released.
The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.
Version |
Location |
Description |
Submitted by |
Date submitted |
Other Digital Version |
n/a
1.5. Exploring JavaScript |
javascript:x = 3; (x > 5)? "x is less": "x is greater"
should be:
javascript:x = 3; (x > 5)? "x is greater" : "x is less"
|
Bo |
Nov 09, 2009 |
Printed |
Page 1
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf |
|
Anonymous |
|
|
4.4
(Safari Books Section 4.4) 3rd paragraph |
of -> or
Current:
This second expression specifies the name of the desired property of the index of the desired array element.
Proposed:
This second expression specifies the name of the desired property or the index of the desired array element.
|
Adam Tolley |
Jun 24, 2011 |
PDF |
Page 6
Final code block, above first paragraph |
The code
false == (x > y)
(x == 2) && (y == 3)
(x > 3) || (y < 3)
will result in TypeErrors.
`(x == 2)` and `(y ==3)` will be evaluated as functions without semicolons (if executed from a file).
See:
https://stackoverflow.com/questions/34214629/strange-typeerror-in-node-js/34214753
I don't know if it's a mistake. The code examples may not have the intention of being executed in a file. I just thought I'd send something in, see if it actually was a mistake or not
|
Ed Flanagan |
Dec 10, 2015 |
Printed |
Page 11
2nd paragraph |
when looking for the JavaScript console under the Tools menu in Firefox, its labeled as Error Console. I was a little confused by that.
|
Anonymous |
Sep 04, 2008 |
Printed |
Page 15
1st paragraph, second sentence |
Incorrect details in description of Unicode:
1. Unicode is a character set but it is not generally used as an encoding. UTF-8 (and UTF-16) are commonly used encodings that can represent any Unicode character. The use of the Unicode number for a character in JavaScript literals such as "\u03c0" is an escape sequence, not an encoding.
2. Unicode has grown over time. It's no longer 16 bits, although that's plenty good for most purposes. Code points now go up to 0x10FFFF, which requires 21 bits. FWIW, Java supports all these characters as of (I think) the 5.0 JDK, which means a single Unicode character may be represented in 2 16 bit Java chars.
See:
http://en.wikipedia.org/wiki/Character_encoding
http://en.wikipedia.org/wiki/Unicode
|
Anonymous |
Dec 02, 2008 |
Printed |
Page 15-9
|
I think I found a little bug in one of the examples in the book:
example 15-9. A logging facility for client-side JavaScript.
It should not work for IE because it needs a tbody element in a table element.
You can find the elements in the dom tree by IE Developer toolbar but you
cannot see anything of a table in the page.
Thank you for this GREAT book!!!
|
Anonymous |
Dec 18, 2008 |
Printed |
Page 15,18
|
Unicode is not a 16-bit encoding.
|
Anonymous |
Apr 03, 2009 |
Printed |
Page 27
3rd Paragraph |
David,
It's hard to term this an error like this form says.
I just wanted to first of all congratulate you on describing the escape sequences so well. You have done a great job of explaining the "world's most misunderstood language (as Crockford calls it)".
One thing I thought could be added to the description is multiple applications of the '\' character. It was not evident from the contents on page 26-27 what would happen if I do document.write('is tab \\\t ?'); It clearly is \ followed by a tab character i.e. once an escape sequence is interpreted it is not interpreted again (i.e. its interpretation is not recursive).
Do you think this is a valid request?
Best Regards,
Kedar
|
Kedar Mhaswade |
Dec 29, 2009 |
Printed |
Page 36
3.6.1 |
"var a = new Array(10);
creates a new array with 10 undefined elements. "
Would that not be 11 elements?
|
Anonymous |
|
Printed |
Page 49
Section 4.1, safari |
In Java 1.5 with autoboxing the following code is legal,
Object o = null;
o = 10;
o = "hey";
Autoboxing is overlooked in section 4.1, Variable Typing
|
Anonymous |
|
PDF |
Page 51
3.8.3 Object to Primitive Conversions, last paragraph |
I think the word "string-to-primitive" in this case is wrong:
"+, ==, != and the relational operators are the only ones that perform this special kind of string-to-primitive conversions."
Should be:
"+, ==, != and the relational operators are the only ones that perform this special kind of string-to-primitive conversions."
(you should read the entire section 3.8.3 to understand what I mean)
|
H?liton Nordt |
Feb 27, 2014 |
PDF |
Page 51
3.8.3 Object to Primitive Conversions, last paragraph |
I think the word "string-to-primitive" in this case is wrong:
"+, ==, != and the relational operators are the only ones that perform this special kind of string-to-primitive conversions."
Should be:
"+, ==, != and the relational operators are the only ones that perform this special kind of object-to-primitive conversions."
(you should read the entire section 3.8.3 to understand what I mean)
|
H?liton Nordt |
Feb 27, 2014 |
Printed |
Page 52
4.3.1 No Block Scope, 2nd paragraph and concept in general |
The second code example that follows "The rule that all variables declared... can cause surprising
results. The following code illustrates this:"
var scope = "global";
function f()
{
alert(scope); // Displays "undefined", not "global"
...
}
f();
---------------------
This code does in fact display the word "global" in an alert window (IE7, FF2). It seems to me that if
you couldn't reference variables outside functions by name you wouldn't actually have 'global'
variables...?
|
Anonymous |
|
Printed |
Page 52
At the bottom of the page |
There is in fact NO ERROR in the last code segment on page 52 even though the "Unconfirmed error reports
and comments from readers" shows that someone has claimed otherwise.
I've tested the example as given in the book and the behaviour exactly matches the one indicated in the
code comments and the description around the example code.
|
Anonymous |
|
Printed |
Page 54
3rd paragraph from bottom of page, last sentence |
"there just happens to be two references to it."
Change "happens" to "happen"
|
Anonymous |
|
PDF |
Page 60
4.4 Property Access Expressions |
var o = {x:1,y:{z:3}};
var a = [o,4,[5,6]];
here is mistake
a[0].x // => 1: property x of expression a[0]
|
Anonymous |
Dec 01, 2013 |
Printed |
Page 65
1st full paragraph |
[
For example, the following code sets both i and j to 2:
i = 1;
j = ++i;
But these lines set i to 2 and j to 1:
i = 1;
j = i++;
]
No, the first two lines set i to 1 and j to 2.
The second two lines set both i and j to 1.
|
Anonymous |
|
Printed |
Page 65,140
upper half |
I've been checking the page "Unconfirmed error reports and comments from readers". Apart from the one
remark I sent earlier here are my other findings:
The errata claims that the text on the page 65 of the book:
For example, the following code sets both i and j to 2:
i = 1;
j = ++i;
But these lines set i to 2 and j to 1:
i = 1;
j = i++;
is in error. It isn't. Instead it correctly describes how these expressions behave. The behavior is the
same in C/C++, Java, JavaScript and I'm sure in some other languages too.
|
Anonymous |
|
Printed, PDF |
Page 68
bottom of page |
The book has the logic of post-increment operator backwards.
The book reads:
"var i = 1, j = i++; // i is 2, j is 1"
It should read:
"var i = 1, j = i++ // i is 1, j is 2"
|
Anonymous |
Mar 19, 2012 |
PDF |
Page 74
4.9.3 |
Is printed var data = [7,8,9]; but it must be var data = ["0","1","2"];
|
Said Fayad |
Aug 07, 2016 |
Printed |
Page 84
First code example |
var a = [1,2,3]; // Start with an array
delete a[2]; // Delete the last element of the array
a.length // => 2: array only has two elements now
When used with arrays, delete only sets the element to undefined and doesn't change the array length. Therefore a.length remains at 3.
"Note that a deleted property or array element is not merely set to undefined..." should thus also be "Note that a deleted property is not merely set to undefined..."
|
Anonymous |
Jul 04, 2014 |
Printed |
Page 93
5th Paragraph |
The last line in this paragraph says:
...this line enumerates the array "properties", 0, 1, and 2: ...
It should be:
...this line enumerates the array "properties", "0", "1", and "2":
(I am saying this because I think the names of the object/array properties are always strings).
|
Kedar Mhaswade |
Jan 02, 2010 |
Printed |
Page 114
para 6 |
line: var undefs = [,,]; ....
comment should say "An array with 3 elements, all undefined"
|
Anonymous |
|
Printed |
Page 114
6th paragraph |
var undefs = [,,]; // An array with two elements, both undefined
This has been previously reported (by me?!), but not quite correctly.
The number of elements created appears to be browser-dependent.
IE7 for Windows creates three elements, apparently inferring an element following the trailing comma. FF2 for Windows creates 2...probably because it seems to ignore a final trailing comma in a list (similar behaviour to Perl).
|
Anonymous |
Oct 26, 2008 |
Printed |
Page 120
first paragraph under "7.7.6 splice" |
This paragraph states that splice() does not return a new array because it modifies the array in place. Actually, the both the examples below (on p. 120) and the Core JavaScript Reference entry for splice() show that splice does return a new array, as well as updating the array in place.
The language used is confusing. It should indicate that the array you receive, if any, contains the removed elements, not the newly spliced array.
|
Anonymous |
|
Printed |
Page 120
first paragraph |
Concerning Array.slice(), in the second full sentence on this page, the book says "If either argument is negative, it specifies an array element relative to the last element in the array." It goes on to say, correctly but in apparent contradiction, "An argument of -1, for example, specifies the last element in the array...".
Suggested revision: "If either argument is negative, it specifies an array element relative to the END OF the array." (instead of, "the last element in")
I love this book. Hope Mr. Flanagan understands what a compliment he is receiving when readers submit errata. People don't want to help fix something unless they really like it :).
|
Anonymous |
Aug 16, 2008 |
Printed |
Page 120
2nd paragraph under 7.7.6 splice() |
"If this second argument is omitted, all array elements from the start element to the end of the array are removed."
probably should read:
"If this second argument is omitted, inconsistent behavior across browser implementations will occur. Use 0 to specify no deletions and the length method to delete all array elements from start element to end of array."
In the example following the paragraph:
a.splice(4);
should be:
a.splice(4,a.length); // works with Firefox & IE, but maybe not safe?
or
a.splice(4,(a.length-4);
Anyway, paragraph needs to be corrected.
|
Boyd Brown |
Sep 24, 2009 |
Printed |
Page 120
particularly on prototype topic |
suggestion:
your discussion on "object" , prototype could be improved.
i feel there should be a distinction between a type (class/ definition of) and an instance of the type.
Your use of the term "object" is ambiguous and confusing, particularly in discussion of the topic prototype.
|
mario |
Nov 07, 2009 |
PDF |
Page 127
Singapore |
The second line in the code example for function merge(o, p) reads:
if (o.hasOwnProperty[prop]) continue; // Except those already in o.
it should read:
if (o.hasOwnProperty(prop)) continue; // Except those already in o.
|
Johannes Choo |
May 30, 2013 |
Printed |
Page 131
Start of example code, first line of commented part |
//Copy length elements of the array from to the array to.
Was confused by this at first not realizing that "from" and "to" were array names. Maybe italicize them to indicate that they are names?
|
Anonymous |
Jul 23, 2009 |
Printed |
Page 137
1st paragraph |
These examples assume that the array is dense and that all elements contain valid data. If this is not the case, you should test the array elements before using them. If you want to exclude null, undefined, and nonexistent elements, you can write this:
for(var i = 0; i < a.length; i++) {
if (!a[i]) continue; // Skip null, undefined, and nonexistent elements
// loop body here
}
Above logic will not only skip null, undefined or nonexistent, it will also skip elements that evaluate to false (such as number 0)
|
Anonymous |
Apr 17, 2015 |
Printed |
Page 138
function check(args) |
Fifth edition, page 138, the second line in function check(args) should be:
var expected=arguments.callee.length; and not args.callee.length;
|
Kedar Mhaswade |
Jan 05, 2010 |
Printed |
Page 140
Example 8-3 |
In the function copyUndefinedProperties(), "if (!p in to)" is used to check whether
the object "to" lacks property "p". Since the unary ! operator has a higher
precendence than the "in" operator (see Table 5-1, pp. 60-61), this statement is
incorrect: p is first negated to obtain !p, and then it is checked whether !p is a
property of to. Parentheses are needed: "if (!(p in to))".
|
Anonymous |
|
Printed |
Page 140
first whole function (copyUndefinedProperties) |
Because the ! operator has higher precedence than the in operator, the function just checks to see if
"false" is in the to object for each property in the from object. Function should be:
function cu(from, to) {
for(p in from) {
if (!(p in to)) to[p] = from[p]; // parentheses around 'p in to'
}
}
|
Anonymous |
|
Printed |
Page 140
Example 8-3. Object utility functions (continued) |
The code in the example 8-3, is incorrect.
Instead of:
for (p in from) {
if (!p in to) to[p] = from[p];
}
It should be:
for (p in from) {
if (!(p in to)) to[p] = from[p];
}
Notice the extra brackets in the if statement.
|
Anonymous |
Jun 11, 2008 |
Printed |
Page 141
code just before section 8.8 |
The code could be fleshed out a bit more to illustrate the idea that 'this' is a keyword never bound to
any particular call object. Yes, that info is on p 137 at the end of 8.4, but by this page that info is a
bit fuzzy and still abstract. Perhaps all of example 8-5 needs to be in section 8.8.4.1.
function makePropertiesInThis ( arg1, arg2, arg3 ) {
for ( var i=0; i < arguments.length; i++ ) {
this[ 'js' + i ] = arguments[i];
}
return this;
}
o = {};
o.func = bindArguments( makePropertiesInThis, 'foo', 'bar' );
x = o.func( 'baz' );
// print is defined as earlier in the book
print( x === o ); // true
print( x === this ); // false
print( "js0" in o ); // true, foo
print( "js1" in o ); // true, bar
print( "js2" in o ); // true, baz
print( "js0" in this ); // false
print( "js1" in this ); // false
print( "js2" in this ); // false
x = (bindArguments(makePropertiesInThis, 'apple'))('banana','cherry');
print( x === o ); // false
print( x === this ); // true
print( "js0" in this ); // true, apple
print( "js1" in this ); // true, banana
print( "js2" in this ); // true, cherry
|
Anonymous |
|
Printed |
Page 143
first sentence |
The correction at http://www.oreilly.com/catalog/9780596101992/errata/jscript5.807 is incorrect; the sentence
was correct before. The overall structure of the sentence is "The facts...interact". The sentence is
describing three facts which interact. So it should be "facts" and not "fact".
|
Anonymous |
|
Printed |
Page 144
7.3 Sparse Arrays |
Section 7.3 example
var a1 = [,,,]; // This array is [undefined, undefined, undefined]
var a2 = new Array(3); // This array has no values at all
0 in a1 // => true: a1 has an element with index 0
0 in a2 // => false: a2 has no element with index 0
0 in a1 actually evaluates to false. It is not true. Tested in Mozilla Scratchpad.
|
Anonymous |
Jun 06, 2015 |
Printed |
Page 145
Example 8-6 |
In Example 8-6, the "get" and "set" methods are defined, but their comments have their names confused
("getter" and "setter" should be switched). The text reads:
// The setter method simply returns the value.
o["get" + name] = function() { return value; };
// The getter method stores the value or throws an exception if
// the predicate rejects the value.
o["set" + name] = function(v) {
if (predicate && !predicate(v))
{157 (4th ed.)} last paragraph (4th ed).;
In Section 10.2, page 157, 4th ed., there is an example for parsing a URL using String.match(). In the
last paragraph there is an off-by-one error in the description of the index property of the result:
AS IS:
"So, in the previous code, the value of the result.index property would be 21, since the matched URL
begins at character position 21 in the text."
SHOULD BE:
"So, in the previous code, the value of the result.index property would be 22, since the matched URL
begins at character position 22 in the text."
|
Anonymous |
|
Printed |
Page 149
2nd bullet |
The text states that "a function literal or nested function that appears within a loop or function is not recompiled each time it is encountered. Nor is a different function object created each time a function literal is encountered."
The latter statement needs clarification. For example, consider:
var a = [];
for(var i = 0; i < 2; i++) {
a[i] = (function() {});
}
alert(a[0]===a[1]); // displays false
This code demonstrates that a new function object is created for the function literal in the loop on each iteration of the loop.
So, under what conditions is a new function object not created for the same literal?
|
Anonymous |
Mar 07, 2010 |
Printed |
Page 151
3rd paragraph |
5th edition
The third paragraph states that, if a constructor function returns an object this object becomes the value of the new expression instead of the newly created object, which is discarded.
It's the other way round. The returned object is discarded and the newly created object is always returned.
Regards
Andreas
|
Anonymous |
May 21, 2009 |
Printed |
Page 158
first paragraph |
"When you use JavaScript objects to *simulate* object-oriented programming techniques ..." [emphasis
added]
maybe should be something like:
"When you use JavaScript objects to simulate the object-oriented programming techniques of strictly-typed
languages ... "
On page 157: "JavaScript is a true object-oriented language."
If that's true, we shouldn't need to simulate object-oriented programming techniques. If we do need to
simulate them, then JavaScript must not be a true object-oriented language.
|
Anonymous |
|
Printed |
Page 161
3rd paragraph (the creation of an 'instance method') |
INSTANCE/CLASS METHOD CONFUSION (5th Addition Rhino Book)
The definition of
Circle.prototype.area = function() { etc.... }
is described as an instance method, which would be a function which is present in all instances of a
Circle, but could POTENTIALLY be changed without affecting other instances.
eg. for these two objects -
var a = new Circle(2);
var b = new Circle(6);
// I could do this.....
b.area = function() { return 1; }
I could redefine the 'area' function for 'a' but it would NOT be changed for 'b' surely?
However, by defining the 'area' function as part of the prototype, that would change the function for ALL
Circle instances. Therefore it is a CLASS method, not an INSTANCE method.
'area' should be defined in the constructor, just like INSTANCE PROPERTIES are.
function Circle(radius)
{
this.r = radius;
this.area = function() { return (Circle.PI * this.r * this.r); }
}
// and something more likely used for a class function using prototype, like:
Circle.prototype.getNumberOfSides() { return 1; }
(although, Circle.getNumberOfSides() is an infinitely better way!)
I find the sections from 9.3.1 - 9.3.5 very confusing to read as an experienced C++ developer, as there
seems to be some fuzziness in the thinking here.
Also in 9.3.2.1 you say the same thing, that an instance method can be defined via the prototype, but
this is just plain wrong!
ps. I am using the latest firefox, so I hope it's not a bug in it's interpreter!
Page 161:
The comment says that 9.3 is very confusing and in fact partly wrong. It isn't. Flanagan is just telling
how things are done in JavaScript.
|
Anonymous |
|
Printed |
Page 166
last paragraph |
the "new" operator doesn't belong there. here's the output from jslint:
Error:
Problem at line 1 character 21: Weird construction. Delete 'new'.
complexNumbers.sort(new function(a,b) { return a.compareTo(b); });
Problem at line 1 character 65: Missing '()' invoking a constructor.
complexNumbers.sort(new function(a,b) { return a.compareTo(b); });
Members Occurrences
compareTo 1
sort 1
|
Anonymous |
|
Printed |
Page 166
last line |
Remove the 'new' keyword.
|
Anonymous |
|
Printed |
Page 168-169
7th line after the end of Example 9-3 |
I'm looking at the 9/08 printing.
My issue is with the passage on p.169 beginning "You must explicitly create this prototype object as an instance of the superclass, ..." and ending at the end of that paragraph.
The text actually seems to describe what's happening here :
http://www.webreference.com/js/column79/4.html
but at the bottom of p.168 the heir () function is used to circumvent the need for the constructor call. Both are correct (I think) but it's incredibly confusing for a newbie like me.
It does look rather like a case of the code having been updated without a change in the comments.
|
Simon R Hughes |
Jan 22, 2009 |
Printed |
Page 170
sections 9.5.1 and 9.5.2 |
The implementation provided for simulating "super" (via the "superclass" property)
does not work when more levels of class hierarchy are used than shown.
For example, if Class C extends B, and Class B extends A, then when the constructor B
referenced "this.superclass" (expecting a reference to "A"), it would instead get "B"
because the "this.superclass" defined by C would have overridden/obscured it.
|
Anonymous |
|
Printed |
Page 174
end of code example |
The book recommends using "args.to_start || 0" in order to process an optional parameter. This produces an error in Firefox and seems to be bad practice. If the parameter was passed but evaluates to false it won't be used. See explanation of what I mean here:
http://stackoverflow.com/questions/148901/is-there-a-better-way-to-do-optional-function-parameters-in-javascript
|
Anonymous |
Jun 06, 2012 |
Printed |
Page 176
Footnote in section 9.7.3 |
The footnote begins: 'The term "duck typing" has been popularlized'
'popularlized' should be 'popularized'
|
Anonymous |
|
Printed |
Page 187
Section 10.1.2 |
In code sample Ex10-2, the 'construct' property of the object passed into the 'define' function should be the 'init' property.
|
Anonymous |
May 05, 2010 |
Printed |
Page 194
code following first paragraph |
In the definition of the higher-order
mapper function
you write
map(a,f) //not defined
instead of
a.map(f)
|
Anonymous |
Jul 09, 2013 |
Printed |
Page 201
First Paragraph |
The hyphen "-" is wrongly omitted from the list of punctuation characters that have special meanings in regular expressions.
|
Jeff Creamer |
Aug 22, 2009 |
Printed |
Page 201
1st paragraph |
The characters '=', '!', and ':' do not have special meaning in a regex.
|
Jake |
Nov 19, 2010 |
Other Digital Version |
202
4th paragraph, under "Constructors and Class Identity" |
Using the Kindle Version of this book. It states on "Page 202 of 1018 (Location 10025 of 50992)" under the subheading "Constructors and Class Identity":
"Even through constructors are not as fundamental as prototypes..." The typo is the word "through" for "though".
|
Aaron Martone |
Aug 26, 2014 |
Printed |
Page 203
end of page |
The following statement confuses some readers (including me at first):
"The non greedy version of our pattern does match at the first character of the
string, so this match is returned; matches at subsequent characters are never even
considered".
The "does match at the first character... so this match is returned" induces people
to think "the match is the first character?". I suggest the following formulation:
--
The non greedy version of our pattern does match starting from the first character of the string, so the
complete match is the one retained; matches starting at subsequent characters are never even considered
after the first one. In other words, the match is "leftmost" ("leftmost longest" for greedy, or "leftmost
shortest" for non-greedy, but always "leftmost"!).
--
(I borrowed the "leftmost" concept from "Programming Perl".)
|
Anonymous |
|
Printed |
Page 203
Below Table 11-3 in Chapter 11 |
Regarding regular expressions, the following text:
/w{3}d?/ // Match exactly three word characters and an optional digit
is incorrect. This regular expression will match 'AAA3' like it is supposed to.
But it will also match 'AAAA3'. Since there are four A's, this regular expression does not "match exactly
three word characters and an optional digit."
Page 203 (regular expressions):
This states that the text in the book:
"/w{3}d?/ // Match exactly three word characters and an optional digit"
is incorrect while it isn't.
Maybe the wording isn't clear in the original comment. I'm not capable of discussing that because I'm not
a native speaker of English.
But the claim that the comment is wrong because of the fact that the regexp matches "AAAA3" i.e. 4
letters followed by a digit is clearly wrong. The regexp produces a match but that match does not match
the whole of the string "AAAA3" it only matches the first 3 letters.
This can clearly be seen with the following code that uses different letters instead of A's only:
y = "ABCD3".match(/w{3}d?/);
alert(y); // shows ABC
y = "ABC3D".match(/w{3}d?/);
alert(y); // shows ABC3
|
Anonymous |
|
Printed |
Page 204
3rd paragraph, 4th sentence |
It looks like there's an extra closing parentheses in "/(ab|cd)+|ef)/"
|
Anonymous |
|
Printed |
Page 210
Paragraph continued from previous page |
Where the text says "For a regular expression r and string s that does not have the g flag set,...", shouldn't it be "For a string s and regular expression r that does not have the g flag set,..."?
|
Timothy W. Fortune |
Sep 24, 2010 |
Printed |
Page 218
2nd bullet in section 12.1.1 |
The pattern in the bullets is Java -> JavaScript but the second bullet reads:
* All java.lang.Number objects convert to Java numbers.
I believe it should read:
* All java.lang.Number objects convert to JavaScript numbers.
|
Anonymous |
|
Printed |
Page 226
1st paragraph |
In the first sentence you use the word 'now' instead of 'not'. It should read: '... and not allowing the important state variables to be read or written directly'.
|
Don Woodlock |
Jun 05, 2013 |
Printed |
Page 232
2nd |
I cannot get the example 14-1 and 14-2 to work. I am using IE7 and checked line by
line. Could there be a problem in the code?
|
Anonymous |
|
Printed |
Page 260
2nd paragraph |
Book: "If Microsoft were to define an addEventHandler() method ..."
Should read: "If Microsoft were to define an addEventListener() method ..."
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 275
4th paragraph, explanation of viewport (also innerwidth/innerheight p 913) |
your definition of 'viewport' is (as it should be) the window minus menus, scrollbars, etc.
your code works as advertised in the browsers OmniWeb and Safari on MacOS X Leopard.
with the browsers Camino, Firefox, Mozilla, Navigator, SeaMonkey (all on MacOS X) and Internet Explorer 7
(on Win XP) your code returns the width of a frame including the scrollbar.
Specifically on Safari, the proper width is the 'computed style width' of the body; however, this value
appears to be 'auto' in the other browsers.
|
Anonymous |
|
Printed |
Page 276
Also first "if" statement on page. |
If not an error, this is something that should be pointed out to the reader...
if(window.screenLeft)
evaluates to FALSE, even with IE, if the value of screenLeft is zero. So using this
code with a window that opens full-screen, for example, results in an undefined
function error.
|
Anonymous |
|
Printed |
Page 276
line 60 in the file js5examples/14/Geometry.js in |
the book correctly says
if (document.documentElement && document.documentElement.scrollWidth) {
but the file contains
if (document.documentElement && document.documentElemnet.scrollWidth) {
|
Anonymous |
|
Printed |
Page 276
Your sole listing here is wrong |
http://oreilly.com/catalog/9780596101992/errata/9780596101992.907
It is correct the way it is printed, not with the "=== undefined" added.
|
Anonymous |
|
Printed |
Page 277
line 60 of provided file 14/Geometry.js |
The book is correct, but the code provided has a typo in line 60:
if (document.documentElement && document.documentElemnet.scrollWidth) {
the second documentElement is misspelled.
|
Anonymous |
|
Printed |
Page 291
last paragraph |
In the 3rd line from the bottom of page 291 there is the code line
Window.open() instead of window.open()
All through this chapter 14 which I am currently reading, I find the
expression "the Window object" ("window" with capital W and in Roman)
where I would have expected to see "the window object" (that is
"window" written with small w and in Constant Width).
|
Anonymous |
|
Printed |
Page 299
1st paragraph |
It was never standardized, and IE 5 and later adopted the W3C...
should be:
It was never standardized, and IE 5 later adopted the W3C...
|
Anonymous |
Nov 12, 2009 |
Printed |
Page 323
First comment section of code |
The line that says
* element is looked up using getElementsById()
should say
* element is looked up using getElementById()
There is no getElementsById() method.
|
Anonymous |
|
Printed |
Page 332
fifth line of code |
Example 15-9
table.appendChild(row);
is not a good idea for Internet Explorer -- wants rows appended to tbody (or thead or tfoot)
Firefox and Safari happy as clams
I notice the screen shot (Figure 15-4) is for Firefox
I admit I didn't use this script, but I can tell you that I had no luck directly appending rows to a
table in MSIE. (Nothing displayed.) Cured by appending to tbody and then appending tbody to table. Found
the cure by Googling.
|
Anonymous |
|
Printed |
Page 335
just at the beginning of the function 'make' |
See how the function begins:
function make(tagname, attributes, children) {
// If we were invoked with two arguments the attributes argument is
// an array or string, it should really be the children arguments.
The comment does not 'really' make sense (English and programming logic wise). I
think that it should be rewritten as:
function make(tagname, attributes, children) {
// If we are invoked with two arguments and the 'attributes' argument is
// an array or string, we assume that the second argument is intended
// to be the 'children' arguments (ie: the real 'attributes' is missing).
// This allows users not to type a null argument in this case.
|
Anonymous |
|
Other Digital Version |
348
~4th paragraph |
The book references the [cookieEnabled] property as if it were a method, ie: cookiesEnabled(). In addition, it references the property as if it were plural (cookies) rather than singular (cookie). The proper reference would be:
navigator.cookieEnabled, not: navigator.cookiesEnabled()
|
Aaron MArtone |
Aug 31, 2014 |
Printed |
Page 361
first sample code for Section 16.2.3 |
The algorithm provided for determining element position fails in some circumstances, at least with
Internet Explorer 6. With tables, there is not the expected containment hierarchy of DIV, DIV, TABLE,
TBODY, TR, TD, SPAN. Instead, both TR and TD act as though TBODY were their container with respect to
position; they provide the same vertical offset. TBODY may also show a vertical offset for a header row
when no header is displayed.
Either the recipe should be improved, or readers should be warned of its limitations.
|
Anonymous |
|
PDF |
Page 367
3rd paragraph |
The name of the field of the document object is scripts, not "<scripts>".
|
Rodrigo Fernandes da Costa |
Apr 13, 2015 |
Printed |
Page 375
bottom |
In example 16-4 (tooltip.js), the comments in the CSS are not formatted correctly. This is probably because they cannot be nested in JavaScript, but confusing to the reader who tries to uncomment the example CSS class definitions and use them.
There should be a note that all the "* /" must be changed to "*/ to work correctly.
Same applies to the downloadable examples.
|
P Sherwood |
Jan 30, 2011 |
PDF |
Page 375
Second before last paragraph |
The word HTTP was used instead of HTML.
|
Anonymous |
Apr 14, 2015 |
Printed |
Page 380
middle |
In the discussion about Computed Styles on page 347 of the fourth edition you discuss
getComputedStyle() as a property of document.defaultView. On page 380 of the fifth
edition you have dropped this. Unfortunately Safari doesn't have
window.getComputedStyle(). Safari does have document.defaultView.getComputedStyle().
This is the way I access the function and the Yahoo! UI library does the same.
|
Anonymous |
|
Printed |
Page 382
Last paragraph |
In the second sentence of the last paragraph "The HTML DOM Level 2 standard defines a disabled property for both <link> and <script> elements." the tag <script> should be the tag <style>.
|
Anonymous |
|
Printed |
Page 382
Last paragraph |
In the second sentence of the last paragraph "The HTML DOM Level 2 standard defines a disabled property for both <link> and <script> elements." the tag <script> should be the tag <style>.
|
Anonymous |
Jul 03, 2008 |
Printed |
Page 386
Comments for function deleteRule |
In the comment for the Stylesheet.prototype.deleteRule function, the fourth line should refer to the "s" parameter, not the "n" parameter.
|
Anonymous |
Jul 03, 2008 |
Printed |
Page 395
3rd paragraph from bottom |
The text says "The second column of Table 17-1 describes what happens when you return
false."
The second column of Table 17-1 actually describes what happens when the event is
triggered, and the column describing what happens when the handler returns false
appears to have been elided.
|
Anonymous |
|
Printed |
Page 403
17.2.4 "Registering Objects as Event Handlers", second paragraph |
This code block is missing a comma at the end of the third line. It should read:
function(event) { listener.handleEvent(event); },
|
Anonymous |
|
Printed |
Page 408
bottom |
I'm not sure this is serious, but in this page *relatedTarget* is defined as
returning a *Node* whereas in page 858 it's defined as returning an *Element*. in a
book by another publisher, it mentions that Mozilla can return a text node as a
relatedTarget, which is consistent with returning a Node instead of an Element. your
book would be more *definitive* if you cleared up this inconsistency.
|
Anonymous |
|
Printed |
Page 411,412,479,503
various |
The changes made in the 08/07 printing used the literal tag syntax to designate code segments in
paragraphs. These tags are present in the 01/08 printing of the book when they should have been removed
before printing.
|
Anonymous |
|
Printed |
Page 417
example 17-2 in the middle |
Nothing but praise for this excellent book. I found a nasty little error in the book:
for instance, when adding an onclick event to a <a> tag, using Handler.Add(aLink,"click",myhandler) does not return false or true when the link is clicked, so it is not possible to stop the link performing the default action.
when the line
handler.call(element,event);
is changed into
return handler.call(element,event);
it works as expected.
kind regards,
|
b.koeman |
Feb 07, 2009 |
Printed |
Page 417-418
417: last 3 lines; 418: top line |
The comments in the example code on p417 imply that an element always has a "document" property, then the code on 418 goes on to make that assumption.
But nowhere (that I can find) in the text of the book is this documented.
It seems that an undocumented feature of IE is being employed, since there is no "document" property attached to an element in FF according to my test.
I realise the example is specifically targeted at the IE browser, but it would be much more helpful if attention was drawn to the undocumented nature of this usage (if that is indeed the case).
Note that the "document" property of an element is not mentioned in the Reference section either, causing further confusion, since in general the Reference section identifies browser-specific implementations.
|
Clark Pearson |
Apr 06, 2009 |
Printed |
Page 433
Very first line (not including the one-line header) |
The comment is wrong, according to the code. Instead of
// Firefox gives us printing keys in e.charCode, IE in e.charCode
It should be:
// Firefox gives us printing keys in e.charCode, IE in e.keyCode
|
Anonymous |
|
Printed |
Page 453
Three-quarters down the code on the page |
The comment of the Validate.js code claims that the anonymous function does not define any symbols in the
global namespace. The code has an error that causes one of the variables to be defined in the global
namespace.
for (j = 0; j < f.elements[j]; // the element we're working on
The above line should properly declare the j variable
for (var j = 0; j < f.elements[j]; // the element we're working on
|
Anonymous |
|
Printed |
Page 461
example 19-1, 4th line |
current:
var cookie = new Cookie("vistordata");
proposed:
var cookie = new Cookie("visitordata");
|
Anonymous |
|
Printed |
Page 462-463
function Cookie |
document.cookie value on FireFox includes a blank space after ';'. As a result, the
code to extract a particular cookie value doesn't work:
var cookies = allcookies.split(';');
var cookie = null;
for(var i = 0; i < cookies.length; i++) {
// Does this cookie string begin with the name we want?
if (cookies[i].substring(0, name.length+1) == (name + "=")) {
cookie = cookies[i];
break;
}
}
This can be easily fixed by first replacing all blanks with zero length strings, as
in:
var cookies = allcookies.replace(" ", "").split(';')
|
Anonymous |
|
Printed |
Page 462
near bottom |
As reported by a previous person the Cookie function has a problem on Firefox because of a space that is
added after the semicolon to split the cookies. Thus this line:
var cookies = allcookies.split(';');
Leaves a space after the split and thus doesn't work correctly when looking up cookie names. The previous
errata reporter said this could be fixed like so:
var cookies = allcookies.replace(' ', '').split(';');
This is not correct either because the replace needs to be global, not just for the first match:
var cookies = allcookies.replace(/ /g, '').split(';');
|
Anonymous |
|
Printed |
Page 462
near bottom |
For problem previously noted (IE too, not just Firefox) my vote would be:
var cookies = allcookies.split('; ');
|
Anonymous |
Jul 07, 2008 |
Printed |
Page 463,464,465
beginning of code block |
The code block on pages 463,464 and 465 begin (erroneously) with:
/**
* This is the Cookie() constructor function.
which is taken from a valid comment block (within the second code block) on page 462. This appears to be a formatting problem, but itn will also cause bad code. Because the comment blocks are unterminated, in the real world? they will comment out the rest of the code until a comment termination appears.
|
Anonymous |
Sep 07, 2009 |
Printed |
Page 464
middle |
It seems that neither IE 6 or Safari 2.0.4 support the max-age attribute for cookies.
This means that the example 19.2 in your book cannot delete cookies in these
mainstream browsers. This occurs in the enabled() method as well. I am reverting to
the expires attribute.
|
Anonymous |
|
Printed |
Page 464, 465
Throughout |
The anonymous functions that are defined should end with a semicolon.
Currently the books shows them as
Cookie.prototype.store = function(daysToLive, path, domain, secure) {
...
}
when they should be
Cookie.prototype.store = function(daysToLive, path, domain, secure) {
...
};
There are three such errors across pages 464 and 465. The first is halfway down page 464, the second is
just above the comment block at the bottom of page 464, and the third is at the end of the first code
section on page 465.
|
Anonymous |
|
Printed |
Page 479
paragraph just before section 20.1.1 |
I see in the Errata that this paragraph was added. I am confused by these <literal> tags. Is it possible that they were meant to be stripped out of the actual printed version? Thanks, any response would be appreciated.
|
Anonymous |
Dec 08, 2009 |
Printed |
Page 480
middle |
In the list of possible factories, could add another one:
function() { return new ActiveXObject("MSXML2.XMLHTTP.3.0"); }
The Yahoo! UI tests for this as the first option for IE.
|
Anonymous |
|
Printed |
Page 481
At end of code sample 20-1 |
At the end of the code example (20-1) there is no closing semicolon. This has been
copied into the http.js file supplied as part of this chapter. All other functions
in this file have closing semicolons.
|
Anonymous |
|
Printed |
Page 481
middle |
"By default, the open() method sets up an asynchronous XMLHttpRequest'
This isn't true with all browsers. If the third argument is omitted some browsers
default to synchronous. Hence the third argument has to be included all the time if
the programmers wants control of whether the request is sync or async.
|
Anonymous |
|
Printed |
Page 486
20.2.1 Basic Get Utilities |
In HTTP.getText function, the request variable will drop out of scope once the function exits.
The garbage collector might clean up the object before onreadystatechange is called
|
Anonymous |
|
Printed |
Page 491
top |
eval(request.responseText);
Should be
eval('(' + request.responseText + ')');
|
Anonymous |
|
Printed |
Page 513
line of code in middle of page |
Should the xsl definition not define an xsl file, rather than an xml file? Should it not read
<xml-stylesheet href="datatoTable.xsl" "type="text/xsl"?>
??
|
Anonymous |
|
Printed |
Page 517
RegExp.test Example |
The example says:
var pattern = /java/i;
pattern.test("JavaScript"); // Returns true
pattern.test("ECMAScript"); // Returns false
But the second test returns false not because it doesn't contain the pattern, but
because of the side effect on the lastIndex in the pattern regular expression.
There should be a mention of this side effect on lastIndex in the Description section
for test, and reference exec and lastIndex for more complete description.
This *dangerous* side effect should be mentioned also in String.match, .search,
.replace, and any other place that applies.
|
Anonymous |
|
Printed |
Page 517
in example with class |
In that class in constructor we specify the expression to
evaluate and than call call the "getNodes" or "getNode" function. In the
instance of the class we store a link to XPathExpression object that we
created by "document.createExpression()" function. In "getNodes" or
"getNode" function we specify a context from which we want to evaluate the
expression. The problem is that if this context is different from "document"
object from which we call "createExpression()" function, we have an
exception with a message "Node cannot be used in a document other than the
one in which it was created". One of solutions to this problem is to store a
link to context in our "XPathExpression" class and in functions "getNodes"
and "getNode" call "evaluate()" function on him.
|
Anonymous |
May 24, 2010 |
Printed |
Page 518
top |
In Firefox 3.0.4, the XML.XPathExpression.getNodes function throws the following error: "Node cannot be used in a document other than the one in which it was created."
This is apparently due to tightening of security restrictions in the new version of the browser.
|
Brannan Cass |
Dec 17, 2008 |
Printed |
Page 520
21.6 paragraph 2, first sentence |
Example 21-12* works in IE only, not in Firefox. Book states:
"This section applies the XML techniques seen earlier in the chapter and uses XPath
and the DOM to create an improved templating facility that works in IE and Firefox."
*12.html and xml.js run on Web server, accessed by IE and Firefox (latest Firefox
version available as of January 22, 2007)
|
Anonymous |
|
Printed |
Page 520
21.6 paragraph 2, first sentence |
12.html and xml.js do not work in Firefox 2.0.0.14 (Win XP SP20 or Firefox 2.0.0.6 (Solaris 8 SPARC). This appears to be due to a namespace collision. The Firefox error console reports that
Namespace "XML" already exists
Substituting "dXML" for "XML" (in both files) fixed the problem.
|
Anonymous |
|
Printed |
Page 526
4th row from bottom |
the object XML is not declared
|
Anonymous |
|
Printed |
Page 537
example 22.4 |
The ImageLoop constructor function sets the image load event for each image before the event function is
ready. The result is that the event handler can fail if the images have been cached.
What really matters is the "var loop = this;" line. If the browser loads the image in a separate thread
the event handler can fire and call countLoadedFrames() before that line is executed.
I see this most often with IE7. The fix is to move the event handler code before the loop that processes
the image URLs:
// This nested function is an event handler that counts how many
// frames have finished loading. When all are loaded, it sets a flag,
// and starts the animation if it has been requested to do so.
var loop = this;
function countLoadedFrames( ) {
loop.loadedFrames++;
if (loop.loadedFrames == loop.frames.length) {
loop.loaded = true;
if (loop.startOnLoad)
loop.start( );
}
}
// Initialize the frames[] array and preload the images
for(var i = 0; i < frameURLs.length; i++) {
this.frames[i] = new Image( ); // Create Image object
// Register an event handler so we know when the frame is loaded
this.frames[i].onload = countLoadedFrames; // defined above
this.frames[i].src = frameURLs[i]; // Preload the frame's image
}
|
Anonymous |
|
Printed |
Page 537
example 22.4 |
Agree to the other comment on this issue. I had the same problem in Firefox 3.6.
The callback function must havbe been defined in code before possibly called. Apparently parsing a JavaScript file is not a 2-pass process but a 1-pass process.
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 551
End of Example 22-8 |
missing final closing '}' at the end of the example
|
Anonymous |
|
Printed |
Page 609
deleteCount description for Array.splice() |
While it would be nice if it was, the deleteCount argument to Array.splice() is not optional according to the ECMAScript v3 spec [1], and according to the spec, a value of undefined should behave the same as the number zero.
When this argument is omitted, you get inconsistent behaviour across browser implementations.
The example given on page 610 states
var a=[1,2,3,4,5,6,7,8];
a.splice(4); // Returns [5,6,7,8]; a is [1,2,3,4]
But the actual results are:
Firefox 2 + 3: Returns [2,3,4,5,6,7,8]; a is [1]
IE 6 + 7: Returns []; a is [1,2,3,4,5,6,7,8]
Opera 9.27: Returns []; a is [1,2,3,4,5,6,7,8]
Opera 9.5: Returns []; a is [2,3,4,5,6,7,8]
Safari 3.1.1: Returns [2,3,4,5,6,7,8]; as is [1]
|
Anonymous |
|
Printed |
Page 610
Example at top of page |
The example as printed is as follows:
var a = [1,2,3,4,5,6,7,8]
a.splice(1,2); // Returns [2,3]; a is [1,4]
a.splice(1,1); // Returns [4]; a is [1]
a.splice(1,0,2,3); //Returns []; a is [1 2 3]
The correct results are as follows:
var a = [1,2,3,4,5,6,7,8]
a.splice(1,2); // Returns [2,3]; a is [1,4,5,6,7,8]
a.splice(1,1); // Returns [4]; a is [1,5,6,7,8]
a.splice(1,0,2,3); // Returns []; a is [1,2,3,5,6,7,8]
|
Robert Gage |
Feb 02, 2009 |
Printed |
Page 610
Top |
Since,
"a.splice(4); // Returns [5,6,7,8]; a is [1,2,3,4]"
was removed from text of the printed copy I recently purchased, the results in the following operations are incorrect.
var a = [1,2,3,4,5,6,7,8]
a.splice(1,2); // Returns [2,3]; a is [1,4]
a.splice(1,1); // Returns [4]; a is [1]
a.splice(1,0,2,3); // Returns []; a is [1 2 3]
should be:
var a = [1,2,3,4,5,6,7,8]; // was missing semicolon
a.splice(1,2); // Returns [2,3]; a is [1,4,5,6,7,8]
a.splice(1,1); // Returns [4]; a is [1,5,6,7,8]
a.splice(1,0,2,3); // Returns []; a is [1,2,3,5,6,7,8]
|
Boyd Brown |
Sep 24, 2009 |
Printed |
Page 611
Array.unshift > Description |
Second sentence reads: "The first argument to shift() becomes..."
Should read: "The first argument to unshift() becomes..."
|
Tom Kumpf |
Jan 25, 2013 |
Printed |
Page 667
"Returns" section of Math.random() |
The book says that Math.random() returns "A pseudorandom number between 0.0 and 1.0." Section 15.8.2.14
of ECMA-262 says it "Returns a number value with positive sign, greater than or equal to 0 but less than
1". That "less than 1" can be of significance, since Math.floor(Math.random() * N) where N is an integer
might return N itself; otherwise, we can safely assume that expression will return an integer from 0 to
N-1.
|
Anonymous |
|
Printed |
Page 708
in Bugs section for String.substr() |
The Bugs section for String.substr() states in part,
"Negative values for start do not work in IE 4 (this is fixed in later versions of IE)."
However, I do not think that this problem has ever been fixed in IE. I just tried it in IE 7 and it's
still broken.
|
Anonymous |
|
PDF |
Page 725
Array.filter() Synopsis |
Change syntax for array.map() to syntax for array.filter()
|
roscoe1 |
Jul 22, 2011 |
PDF |
Page 738
Array.splice example |
The sample output seems to have been based on a different original source array, so the actual output values differ from what the book indicates. When I try the second example with Node.js, I get the following:
$ node
> var a = [1,2,3,4,5,6,7,8]
undefined
> a
[ 1,
2,
3,
4,
5,
6,
7,
8 ]
> a.splice(1,2);
[ 2, 3 ]
> a
[ 1,
4,
5,
6,
7,
8 ]
|
Al Wold |
Apr 28, 2012 |
PDF |
Page 757
Date.setUTCFullYear() Synopsis |
Change date.setSeconds(seconds, millis) to date.setUTCFullYear(year, month)
|
roscoe1 |
Jul 22, 2011 |
PDF |
Page 766
decodeURIComponent() Synopsis |
Change decodeURI(s) to decodeURIComponent(s)
|
roscoe1 |
Jul 22, 2011 |
PDF |
Page 770
Error Examples |
In the sentence fragment, "And if you catch an exception, you might display its to the user with code like the following", change "its" to "it" or specify what is displayed.
|
roscoe1 |
Jul 22, 2011 |
PDF |
Page 771
Error.toString() Synopsis |
Remove space from "error. toString()"
|
roscoe1 |
Jul 22, 2011 |
Printed |
Page 823
properties offsetHeight, offsetWidth, scrollHeight, scrollWidth |
I believe that the description of left-mentioned properties is ambiguous. It doesn't get clear on clipped (CSS overflow:hidden) content.
I would write:
"int offsetHeight, offsetWidth
The height and width, in pixels, of the element's rendered content (only the visible portion of a clipping region), including the element's CSS padding, border and scrollbars, but not its margin."
"int scrollHeight, scrollWidth
Computed height and width, in pixels, of an element. This includes portions being clipped by a clipping region, but no scrollbars."
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 833
The Image object title block |
The Inherits from section should presumably end with Image rather than Input
But is the inheritance chain correct otherwise??
|
Anonymous |
|
Printed |
Page 834
Section entitled "HTML Syntax" |
The Image object is described as having onload, onerror, and onabort event handler attributes. Those
attributes are not valid (X)HTML for the IMG tag, and the DOM does not indicate that the HTMLImageElement
has those properties (e.g. the load event only applies to the body, FRAMESET, and OBJECT elements--see
DOM2-Events section 1.6.5).
However, it appears most browsers support these attributes.
|
Anonymous |
|
Printed |
Page 840
Input element names |
Book: "name=value1,value2,...,valuen"
Should read: "name=value1&name=value2&...&name=valuen"
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 841
Paragraph on Input.click() method. |
The book states:
Input.click()
The click() method is not often useful. Because it does not invoke the onclick event
handler, it is not useful to call this method on elements of type "button"; ...
--------------
This is a mistake. Try this code. It executes click() method and it fires the
onclick() event on button. It works on IE and mozilla firefox:
<form action="DEFANGED_javascript:void 0;">
<input type="button" id="mybutton" DEFANGED_Onclick="alert('I was clicked');"
value="my button">
</form>
<DEFANGED_script>
document.getElementById("mybutton").click();
</script>
|
Anonymous |
|
Printed |
Page 843
Input.onclick |
Book: "the onclick handler is also triggered when the user activates the element using keyboard traversal."
Should read: "... using a dedicated trigger key on the keyboard. Most modern browsers are using the [SPACE] key to trigger the onclick event."
...otherwise the event's name was "onfocus" ;)
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 858
4th paragraph from the bottom |
The information about the related target properties refers to elements, whereas the last paragraph of
page 408 refers to nodes. Both paragraphs are not consistent with each other.
As text nodes can be the related target and text nodes are not elements, the paragraph on page 858 should
be updated.
If it is decided that text nodes should not allowed as a related target, the last paragraph on page 408
should be updated.
|
Anonymous |
|
Printed |
Page 876
4TH EDITION |
space is missing around HTMLFormElement
|
Anonymous |
|
Printed |
Page 880
Range.commonAncestorContainer |
Book: "The most deeply nested Document node"
Should read: "The most deeply nested Element node"
|
Axel Dahmen |
Mar 12, 2010 |
Printed |
Page 896
4TH EDITION |
The second argument of the add() method is an index (integer) in IE:
try { select.add(theOpt, anOpt); } // standards compliant
catch(ex) { select.add(theOpt, indexOfAnOpt); } // IE only
|
Anonymous |
|
Printed |
Page 902
Throws paragraph |
In the Throws section, it should say
"if index is less than -1", rather than "if index is less than 0".
|
Anonymous |
May 02, 2009 |
Printed |
Page 902
Table.insertRow |
The text says that Table.insertRow(index) throws a DOMException if index is negative, but the DOM2 HTML spec says that a value of -1 for index causes the new row to be appended to the table. (Firefox and Opera both treat -1 that way; I haven't tested other browsers.)
The same applies to TableRow.insertCell() on page 904.
|
cchittle |
Mar 28, 2011 |
Printed |
Page 913
innerHeight and innerWidth |
innerHeight and innerWidth, under Firefox, are the client area size, including the scrollbars.
To have the viewport size, you must use document.documentElement.clientWidth and
document.documentElement.clientHeight.
Tested on Firefox 2.0.
|
Anonymous |
|
Printed |
Page 933
on this page |
http://oreilly.com/catalog/9780596101992/errata/9780596101992.807
The following errata is incorrect:
Title line for XMLHttpRequest;
Internet Explorer 5.0
should be
Internet Explorer 7.0
It is actually appropriate to list IE 5 instead of IE 7, because the section
below clearly states that IE5 and IE6 support the underlying functionality,
simply with a different call.
|
Anonymous |
|
Printed |
Page 935
4th paragraph, item 5 |
Last sentence of item #5:
Now reads: "If so, use getResponseHeader() or getResponseHeaders() . . ."
Should read, "If so, use getResponseHeader() or getAllResponseHeaders() . . ."
|
Anonymous |
Aug 28, 2008 |
Printed |
Page 943
5 lines from bottom of page |
snapshotLength
should be
readonly long snapshotLength
|
Anonymous |
|
Printed |
Page 943
2 lines from bottom of page |
stringValue
should be
readonly String stringValue
|
Anonymous |
|
Other Digital Version |
999
n/a |
Several typos in the examples have been reported and fixed in the book, but not in the example downloads. For instance, in example 14-2 "Element" is misspelled "Elemnet".
All examples should be corrected as is the book.
BTW, your errata table shows corrections made in 2007 and 2008, and the corrections have been made in my printed 5th edition book, whose printing history is listed as August 2006.
|
P Sherwood |
Jan 29, 2011 |