0% found this document useful (0 votes)
47 views85 pages

JavaScript: A Beginner's Guide, Fifth Edition Pollock - eBook PDF download

JavaScript: A Beginner's Guide, Fifth Edition by John Pollock is a comprehensive resource for learning JavaScript, covering essential topics from basic HTML and CSS knowledge to advanced scripting techniques. The eBook is available for download along with other related titles on ebookluna.com. It includes practical exercises and online resources to enhance the learning experience.

Uploaded by

larosgeels8h
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views85 pages

JavaScript: A Beginner's Guide, Fifth Edition Pollock - eBook PDF download

JavaScript: A Beginner's Guide, Fifth Edition by John Pollock is a comprehensive resource for learning JavaScript, covering essential topics from basic HTML and CSS knowledge to advanced scripting techniques. The eBook is available for download along with other related titles on ebookluna.com. It includes practical exercises and online resources to enhance the learning experience.

Uploaded by

larosgeels8h
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 85

JavaScript: A Beginner's Guide, Fifth Edition

Pollock - eBook PDF download

https://ebookluna.com/download/javascript-a-beginners-guide-
fifth-edition-ebook-pdf/

Download full version ebook from https://ebookluna.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookluna.com
to discover even more!

(eBook PDF) Chemical Dependency Counseling: A Practical Guide Fifth Edition

https://ebookluna.com/product/ebook-pdf-chemical-dependency-counseling-a-
practical-guide-fifth-edition/

(eBook PDF) Learning Web Design: A Beginner's Guide to HTML, CSS,


JavaScript, and Web Graphics 5th Edition

https://ebookluna.com/product/ebook-pdf-learning-web-design-a-beginners-
guide-to-html-css-javascript-and-web-graphics-5th-edition/

(eBook PDF) Communicating for Results A Canadian Student's Guide 5th Fifth
Edition

https://ebookluna.com/product/ebook-pdf-communicating-for-results-a-
canadian-students-guide-5th-fifth-edition/

(eBook PDF) PMP Project Management Professional Study Guide, Fifth Edition

https://ebookluna.com/product/ebook-pdf-pmp-project-management-
professional-study-guide-fifth-edition/
(eBook PDF) The Norton Field Guide to Writing (Fifth Edition) 5th Edition

https://ebookluna.com/product/ebook-pdf-the-norton-field-guide-to-writing-
fifth-edition-5th-edition/

(Original PDF) New Perspectives on HTML5, CSS3, and JavaScript 6th Edition

https://ebookluna.com/product/original-pdf-new-perspectives-on-
html5-css3-and-javascript-6th-edition/

Joint Structure and Function: A Comprehensive Analysis Fifth Edition

https://ebookluna.com/product/joint-structure-and-function-a-comprehensive-
analysis-fifth-edition/

The entrepreneur's guide to law and strategy Fifth Edition Craig E. Dauchy
- eBook PDF

https://ebookluna.com/download/the-entrepreneurs-guide-to-law-and-strategy-
ebook-pdf/

Mike Meyers’ CompTIA A+ Guide the Managing and Troubleshooting PCs. Fifth
Edition (Exams 220-901 & 220-902) Mike Meyers - eBook PDF

https://ebookluna.com/download/mike-meyers-comptia-a-guide-the-managing-
and-troubleshooting-pcs-fifth-edition-exams-220-901-220-902-ebook-pdf/
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter
Blind Folio: i

JavaScript
A Beginner’s Guide

Fifth Edition
John Pollock

New York Chicago San Francisco


Athens London Madrid Mexico City
Milan New Delhi Singapore
Sydney Toronto

00-FM.indd 1 17/09/19 5:33 PM


Copyright © 2020 by McGraw-Hill Education (Publisher). All rights reserved. Except as permitted under the United States
Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means, or stored
in a database or retrieval system, without the prior written permission of the publisher, with the exception that the program
listings may be entered, stored, and executed in a computer system, but they may not be reproduced for publication.

ISBN: 978-1-26-045769-8
MHID: 1-26-045769-9

The material in this eBook also appears in the print version of this title: ISBN: 978-1-26-045768-1,
MHID: 1-26-045768-0.

eBook conversion by codeMantra


Version 1.0

All trademarks are trademarks of their respective owners. Rather than put a trademark symbol after every occurrence of a trade-
marked name, we use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringe-
ment of the trademark. Where such designations appear in this book, they have been printed with initial caps.

McGraw-Hill Education eBooks are available at special quantity discounts to use as premiums and sales promotions or for use in
corporate training programs. To contact a representative, please visit the Contact Us page at www.mhprofessional.com.

Oracle and Java are registered trademarks of Oracle Corporation and/or its affiliates. All other trademarks are the property of
their respective owners, and McGraw-Hill Education makes no claim of ownership by the mention of products that contain these
marks.

Screen displays of copyrighted Oracle software programs have been reproduced herein with the permission of Oracle Corpora-
tion and/or its affiliates.

Information has been obtained by Publisher from sources believed to be reliable. However, because of the possibility of human
or mechanical error by our sources, Publisher, or others, Publisher does not guarantee to the accuracy, adequacy, or completeness
of any information included in this work and is not responsible for any errors or omissions or the results obtained from the use
of such information.

TERMS OF USE

This is a copyrighted work and McGraw-Hill Education and its licensors reserve all rights in and to the work. Use of this work
is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the
work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit,
distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill Education’s prior consent. You
may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your right to
use the work may be terminated if you fail to comply with these terms.

THE WORK IS PROVIDED “AS IS.” McGRAW-HILL EDUCATION AND ITS LICENSORS MAKE NO GUARANTEES
OR WARRANTIES AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED
FROM USING THE WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA
HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUD-
ING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE. McGraw-Hill Education and its licensors do not warrant or guarantee that the functions contained in the work will
meet your requirements or that its operation will be uninterrupted or error free. Neither McGraw-Hill Education nor its licensors
shall be liable to you or anyone else for any inaccuracy, error or omission, regardless of cause, in the work or for any damages
resulting therefrom. McGraw-Hill Education has no responsibility for the content of any information accessed through the work.
Under no circumstances shall McGraw-Hill Education and/or its licensors be liable for any indirect, incidental, special, punitive,
consequential or similar damages that result from the use of or inability to use the work, even if any of them has been advised of
the possibility of such damages. This limitation of liability shall apply to any claim or cause whatsoever whether such claim or
cause arises in contract, tort or otherwise.
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter
Blind Foli iii

To my wife, Heather, and children, Eva, Elizabeth, Elaine, and Evan,


Bruce and Joy Anderson, and Dr. J. D. and Linda Andrews

In memory of John and Betty Hopkins, James D. and


Livian Anderson, John William and Edith Hopkins,
Burley T. and Aline Price, “Doc” Flores, and Clifton Idom

00-FM.indd 3 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter
Blind Foli iv

About the Author


John Pollock is employed as a software developer during
the day and works on Web sites and other projects during
the evening. You can find him on Twitter (@ScripttheWeb)
or LinkedIn (https://www.linkedin.com/in/john-pollock-
82a2b074). John holds a Bachelor of Arts in English from Sam
Houston State University and currently lives in New Waverly,
Texas with his wife, Heather, and children, Eva, Elizabeth,
Elaine, and Evan.

About the Technical Editor


Christie Sorenson is a senior software engineer at ZingChart.
She has worked on JavaScript-based systems since 1997 and
has been fascinated with the evolution of the language. She
has collaborated and been the technical editor on several
JavaScript and HTML books. She holds a Bachelor of Science
in Computer Science from University of California, San Diego,
and now lives in San Francisco with her husband, Luke, and
daughters, Ali and Keira.

00-FM.indd 4 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents
ACKNOWLEDGMENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
.
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
.
1 Introduction to JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
.
What You Need to Know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
.
Basic HTML and CSS Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.
Basic Text Editor and Web Browser Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.
Which Version? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
.
Client-Side and Server-Side Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
.
Beginning with JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.
Prototype-Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.
Interpreted Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.
Numerous Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.
Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.
Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
.
Try This 1-1: Use JavaScript to Write Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
.
Chapter 1 Self Test ................................................................. 11
.
2 Placing JavaScript in an HTML File ..................................... 15
.
Using the HTML Script Tags ....................................................... 16
.
Identifying the Scripting Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
.
Calling External Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
.
v

00-FM.indd 5 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

vi JavaScript: A Beginner’s Guide

Specifying when the Script Should Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

.
Using <noscript></noscript> Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

.
Creating Your First Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

.
Writing a “Hello World” Script ............................................... 20

.
Creating an HTML Document for the Script .................................. 21

.
Inserting the Script into the HTML Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

.
Try This 2-1: Insert a Script into an HTML Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

.
Using External JavaScript Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

.
Creating a JavaScript File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

.
Creating the HTML Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

.
Viewing the Pages in Your Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

.
Try This 2-2: Call an External Script from an HTML Document . . . . . . . . . . . . . . . . . . . . . 27

.
Using JavaScript Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
.
Inserting Comments on One Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
.
Adding Multiple-Line Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Chapter 2 Self Test ................................................................. 30
.
3 Using Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Understanding Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
.
Why Variables Are Useful .......................................................... 35
.
Variables as Placeholders for Unknown Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
.
Variables as Time-Savers ..................................................... 35
.
Variables as Code Clarifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
.
Defining Variables for Your Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
.
Declaring Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
.
Assigning Values to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
.
Naming Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
.
Understanding Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
.
Number ...................................................................... 41
.
String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
.
Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
.
Null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
.
Undefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
.
Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.
Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.
Try This 3-1: Declare Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
.
Using Variables in Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
.
Making a Call to a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
.
Adding Variables to Text Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
.
Writing a Page of JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
.
Creating the Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
.
Defining the Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
.
Adding the Commands ....................................................... 55
.
Modifying the Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
.
00-FM.indd 6 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents vii

Try This 3-2: Create an HTML Page with JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

.
Chapter 3 Self Test ................................................................. 60

.
4 Using Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

.
What a Function Is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

.
Why Functions Are Useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

.
Structuring Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

.
Declaring Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

.
Defining the Code for Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

.
Naming Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
.
Adding Arguments to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

.
Adding Return Statements to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

.
Calling Functions in Your Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
.
Script Tags: Head Section or Body Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

.
Calling a Function from Another Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

.
Calling Functions with Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
76
Calling Functions with Return Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
.
Other Ways to Define Functions .............................................. 82
.
Try This 4-1: Create an HTML Page with Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
.
Scope/Context Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
.
Global Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
.
Function Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
.
Block Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
.
Try This 4-2: Write Your Own Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
.
Chapter 4 Self Test ................................................................. 91
.
5 JavaScript Operators ..................................................... 95
.
Understanding the Operator Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
.
Understanding Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
.
The Addition Operator (+) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
.
The Subtraction Operator (–) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
.
The Multiplication Operator (*) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
.
The Division Operator (/) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
.
The Modulus Operator (%) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
.
The Increment Operator (++) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
.
The Decrement Operator (– –) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
.
The Unary Plus Operator (+) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
.
The Unary Negation Operator (–) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
.
The Exponentiation Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
.
Understanding Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
.
The Assignment Operator (=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
.
The Add-and-Assign Operator (+=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
.
The Subtract-and-Assign Operator (–=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
.
The Multiply-and-Assign Operator (*=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
.
The Divide-and-Assign Operator (/=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
.
00-FM.indd 7 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

viii JavaScript: A Beginner’s Guide

The Modulus-and-Assign Operator (%=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

.
The Exponent-and-Assign Operator (**=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

.
Try This 5-1: Adjust a Variable Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

.
Understanding Comparison Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

.
The Is-Equal-To Operator (==) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

.
The Is-Not-Equal-To Operator (!=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

.
The Strict Is-Equal-To Operator (===) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

.
The Strict Is-Not-Equal-To Operator (!==) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

.
The Is-Greater-Than Operator (>) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

.
The Is-Less-Than Operator (<) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

.
The Is-Greater-Than-or-Equal-To Operator (>=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

.
The Is-Less-Than-or-Equal-To Operator (<=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

.
Understanding Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
117
The AND Operator (&&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
.
The OR Operator (||) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
.
The NOT Operator (!) ........................................................ 118
.
The Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
.
Special Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
.
Understanding Order of Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
.
Try This 5-2: True or False? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
.
Chapter 5 Self Test ................................................................. 123
.
6 Conditional Statements and Loops ....................................... 125
.
Defining Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
.
What Is a Conditional Statement? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
.
Why Conditional Statements Are Useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
.
Using Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
.
Using if/else Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
.
Using the switch Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
.
Using the Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
.
User Input from a Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
.
Try This 6-1: Work with User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
.
Defining Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
.
What Is a Loop? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
.
Why Loops Are Useful ....................................................... 144
.
Using Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
.
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
.
while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
.
do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
.
for in, for each in, and for of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
.
Using break and continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
.
Try This 6-2: Work with for Loops and while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
.
Chapter 6 Self Test ................................................................. 160
.
00-FM.indd 8 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents ix

7 JavaScript Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

.
What Is an Array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

.
Why Arrays Are Useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

.
Defining and Accessing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

.
Naming an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

.
Defining an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Accessing an Array’s Elements ............................................... 167

.
Using the length Property and Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

.
Changing Array Values and Changing the Length ............................. 169

.
Try This 7-1: Use Loops with Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

.
Array Properties and Methods ...................................................... 172
.
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
.
Nesting Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
.
Defining Nested Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
.
Loops and Nested Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
.
Try This 7-2: Nested Arrays Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
.
Chapter 7 Self Test ................................................................. 193
.
8 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
.
Defining Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
.
Creating Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
.
Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
.
Single Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
.
Try This 8-1: Create a Computer Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
.
Object Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
.
Constructor Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
.
Using Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
.
The class Keyword ........................................................... 209
.
Helpful Statements for Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
.
The for-in Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
.
The with Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
.
Try This 8-2: Practice with the Combination Constructor/Prototype Pattern . . . . . . . . . . 212
.
Understanding Predefined JavaScript Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
.
The Navigator Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
.
The History Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
.
Chapter 8 Self Test ................................................................. 218
.
9 The Document Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
.
Defining the Document Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
.
Using the Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Using the Properties of the Document Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
.
The cookie Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
.
00-FM.indd 9 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

x JavaScript: A Beginner’s Guide

The dir Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

.
The lastModified Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

.
The referrer Property ......................................................... 227

.
The title Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

.
The URL Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

.
The URLUnencoded Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Using the Methods of the Document Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

.
The get Methods for Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

.
The open() and close() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

.
The write() and writeln() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

.
Using DOM Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
.
DOM Node Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
238
DOM Node Methods ......................................................... 241
.
Try This 9-1: Add a DOM Node to the Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

.
Creating Dynamic Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
.
Styles in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
.
Simple Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
.
Coding a Dynamic Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
.
Try This 9-2: Try Out Property Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Chapter 9 Self Test ................................................................. 253
.
10 Event Handlers ........................................................... 255
.
What Is an Event Handler? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
.
Why Event Handlers Are Useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
.
Understanding Event Handler Locations and Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
.
Using an Event Handler in an HTML Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
.
Using an Event Handler in the Script Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
.
Learning the Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
.
The Click Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
.
Focus and Blur Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
.
The Load and Unload Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
.
The Reset and Submit Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
.
The Mouse Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
.
The Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
.
Try This 10-1: Focus and Blur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
.
Other Ways to Register Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
.
The addEventListener() Method .............................................. 272
.
The attachEvent() Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
.
The Event Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
.
DOM and Internet Explorer: DOM Level 0 Registration . . . . . . . . . . . . . . . . . . . . . . . 274
.
Using event with Modern Event Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
.
Properties and Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
.
Event Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
.
Try This 10-2: Using addEventListener() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
.
00-FM.indd 10 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents xi

Creating Scripts Using Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

.
Show Hidden Content ........................................................ 279

.
Change Content .............................................................. 280

.
Custom Events ............................................................... 284

.
Chapter 10 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

.
11 Introduction to Node.js ................................................... 289

.
Introducing Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
.
Installing Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
.
Check for a Current Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

.
Install Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
.
Write a “Hello World” Script ................................................. 292

.
Using Node Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
.
Using Native Node Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
295
Asynchronous Execution ..................................................... 296
.
Non-Native Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
.
Try This 11-1: Use a Custom Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
.
Installing a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
.
Database Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
.
Install PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
.
Create a Database Using pgAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
.
Try This 11-2: Test Some SQL Queries ............................................. 312
.
Creating a Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
.
Chapter 11 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
.
12 Math, Number, and Date Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
.
Using the Math Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
.
What Is the Math Object? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
.
How the Math Object Is Useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
.
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
.
Try This 12-1: Display a Random Link on a Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
.
Understanding the Number Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
.
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
.
Using the Date Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
.
Properties and Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
.
Methods That Get Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
.
Methods That Set Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
.
Other Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
.
How About Some Date Scripts? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
.
Try This 12-2: Create a JavaScript Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
.
Continuing Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
.
Getting to the Needed Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
.
Running Some Calculations on the Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
.
Chapter 12 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
.
00-FM.indd 11 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

xii JavaScript: A Beginner’s Guide

13 Handling Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

.
Introduction to the String Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

.
The String Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

.
The String Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

.
What’s the Difference? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

.
Using the Properties and Methods of the String Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

.
The length Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

.
Methods of the String Object ....................................................... 360

.
Try This 13-1: Use indexOf() to Test an Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

.
Using Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
.
Setting a Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
.
Reading a Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
.
Try This 13-2: Remember a Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
376
Using Regular Expressions ......................................................... 377
.
Creating Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
.
Testing Strings Against Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

.
Adding Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
.
Creating Powerful Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
.
Grouping Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
.
The replace(), match(), matchAll(), and search() Methods . . . . . . . . . . . . . . . . . . . . . 384

.
More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
.
Continuing Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
.
Chapter 13 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
.
14 Browser-Based JavaScript ................................................ 391
.
Window: The Global Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
.
Using the Properties of the Window Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
.
The closed Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
The frames Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
.
The innerWidth and innerHeight Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
.
The length Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
.
The location Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
.
The name Property ........................................................... 396
.
The opener Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
.
The parent, self, and top Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
.
The status and defaultStatus Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
.
Try This 14-1: Use the location and innerWidth Properties .......................... 398
.
Using the Methods of the Window Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
.
The alert(), prompt(), and confirm() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
The print() Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
.
The setInterval() and clearInterval() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
The setTimeout() and clearTimeout() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
.
Try This 14-2: Use the setTimeout() and confirm() Methods . . . . . . . . . . . . . . . . . . . . . . . . . 406
.
00-FM.indd 12 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents xiii

The Main Window and New Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

.
The Tale of Pop-up Windows ................................................. 407

.
Opening New Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

.
Closing New Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

.
Moving, Resizing, and Scrolling New Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

.
The resizeBy() and resizeTo() Methods ....................................... 416

.
The scrollBy() and ScrollTo() Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

.
Working with Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
.
Rollovers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
.
JavaScript and Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
420
Purpose of Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
.
Accessing Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
.
Breaking Out of Frames ...................................................... 423
.
Using iFrames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
.
Chapter 14 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
.
15 JavaScript Forms and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
.
Accessing Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
.
Using the forms Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
.
Using an ID .................................................................. 431
.
Using the Properties and Methods of the Form Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
.
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
.
Ensuring the Accessibility of Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
.
Using Proper Element and Label Order ....................................... 438
.
Using <label></label> Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
.
Using <fieldset></fieldset> Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
.
Not Assuming Client-Side Scripting .......................................... 439
.
Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
.
Simple Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
.
Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
.
Check Boxes and Radio Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
.
Try This 15-1: Request a Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
.
HTML5 and Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
.
New Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
.
New Input Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
.
New Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
.
HTML5 Form Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
.
Try This 15-2: Validate a Phone Number with HTML5 or JavaScript ................ 455
.
AJAX and JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
.
AJAX ........................................................................ 456
.
JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
.
Chapter 15 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
.
00-FM.indd 13 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

xiv JavaScript: A Beginner’s Guide

16 Further Browser-Based JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

.
Using jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

.
Obtaining jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

.
Getting Started: document.ready() ............................................ 471

.
Using Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

.
Altering Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

.
Methods for Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

.
Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
.
Try This 16-1: Use jQuery to Create Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

.
Debugging Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
.
Types of Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
.
Using the Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
.
Using a Lint Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
.
Browser Developer Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
.
JavaScript and Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
.
Separate Content from Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
486
Enhancing Content ........................................................... 488
.
Try This 16-2: Make This Code Accessible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
.
JavaScript Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
.
Page Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
.
JavaScript and APIs from HTML ................................................... 492
.
The <canvas> Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
.
Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
.
Try This 16-3: Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
.
Node.js App Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
.
Update the Node.js Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Update the Front-end Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
.
Need Help? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
.
Chapter 16 Self Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
.
A Answers to Self Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
.
Chapter 1: Introduction to JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
.
Chapter 2: Placing JavaScript in an HTML File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
.
Chapter 3: Using Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
.
Chapter 4: Using Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
.
Chapter 5: JavaScript Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
.
Chapter 6: Conditional Statements and Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
.
Chapter 7: JavaScript Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
.
Chapter 8: Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
.
Chapter 9: The Document Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
.
00-FM.indd 14 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Contents xv

Chapter 10: Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517

.
Chapter 11: Introduction to Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

.
Chapter 12: Math, Number, and Date Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

.
Chapter 13: Handling Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

.
Chapter 14: Browser-Based JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520

.
Chapter 15: JavaScript Forms and Data ....................................... 521

.
Chapter 16: Further Browser-Based JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

.
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

.
00-FM.indd 15 17/09/19 5:33
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter
Blind Folio vi

Acknowledgments
I would like to begin by thanking my wonderful wife, Heather Pollock, for all of her love,
support, and encouragement in all I do. I love you! I would also like to thank my three
daughters, Eva, Elizabeth, and Elaine, as well as my son, Evan. I love all of you!
I would like to thank my parents, Bruce and Joy Anderson, for their love and guidance, and
for always supporting my endeavors.
I would like to thank Dr. J. D. and Linda Andrews for their love, guidance, and support.
In addition, I would like to thank Richard Pollock (brother) and family, Misty Castleman
(sister) and family, Warren Anderson (brother) and family, Jon Andrews (brother) and family,
Lisa and Julian Owens (aunt/uncle) and family, and every aunt, uncle, cousin, or other relation
in my family. All of you have been a great influence in my life.
I would like to thank all of my editors at McGraw-Hill for their outstanding help and
support throughout the writing of this book. Thanks to Lisa McClain, Emily Walters, Claire Yee,
Snehil Sharma, Sarika Gupta, Bart Reed, and to all the editors who worked on this and previous
editions of the book.
Thanks to my technical editor, Christie Sorenson, for editing and checking over all the
technical aspects of the book and for helping me provide clear explanations of the topics that
are covered.
I would like to thank God for the ability He has given me to help and teach people by my
writing. “In all your ways acknowledge Him, and He shall direct your paths.” (Proverbs 3:6)

xvi

00-FM.indd 16 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

Introduction
W elcome to JavaScript: A Beginner’s Guide, Fifth Edition! Years ago, I was surfing
the Web and noticed that people were publishing pages about themselves and calling
them homepages. After viewing a number of these, I decided to create a homepage myself. I
had no idea where to begin, but through trial and error I figured out how to code HTML and
publish my documents on a Web server. Over time, I saw some interesting effects used on other
homepages (like alert messages that popped up out of nowhere or images that would magically
change when I moved my mouse over them). I was curious and just had to know what was being
done to create those effects. Were these page creators using HTML tags I did not know about?
Eventually, one site revealed what was being used to create those effects: JavaScript. I
went in search of information on it and came across a few tutorials and scripts on the Web.
Since I had programmed in other languages (such as a relatively obscure language called Ada),
I was able to catch on to JavaScript fairly quickly by looking at these tutorials and scripts.
I learned enough that I decided to create a Web site that would teach HTML and JavaScript
to beginners. As soon as I began the project, I received questions from visitors that were
way over my head—forcing me to dig deeper and learn more about JavaScript. As a result,
I became completely familiar with this scripting language and what it can do. Not only can
you add fun effects to a Web page, you can create scripts that will perform useful tasks, like
validate form input, add navigational elements to documents, and react to user events.
The goal of this book is to help you to learn the basics of the JavaScript language with as
little hair pulling and monitor smashing as possible. You do not need any prior programming
experience to learn JavaScript from this book. All you need is knowledge of HTML and/or
XHTML, Cascading Style Sheets (CSS), and how to use your favorite text editor and Web
browser (see Chapter 1 for more information).

xvii

00-FM.indd 17 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0 / Front Matter

xviii JavaScript: A Beginner’s Guide

What This Book Covers


The 16 chapters of this book cover specific topics on the JavaScript language. The first two
chapters cover the most basic aspects of the language: what it is, what you need to know to
begin using JavaScript, and how to place JavaScript into an HTML file. The middle of the
book (Chapters 3–14) covers beginning JavaScript topics from variables all the way to using
JavaScript with forms. The final two chapters (Chapters 15–16) introduce some advanced
techniques, and point you toward resources if you want to learn more about JavaScript once
you have completed the book.
This book includes a number of special features in each chapter to assist you in learning
JavaScript. These features include

● Key Skills & Concepts Each chapter begins with a set of key skills and concepts that
you will understand by the end of the chapter.
● Ask the Expert The Ask the Expert sections present commonly asked questions about
topics covered in the preceding text, with responses from the author.
● Try This These sections get you to practice what you have learned using a hands-on
approach. Each Try This will have you code a script through step-by-step directions
on what you need to do to in order to accomplish the goal. You can find solutions to
each project on the McGraw-Hill Professional Web site at www.mhprofessional.com/
computingdownload.
● Notes, Tips, and Cautions These elements call your attention to noteworthy statements
that you will find helpful as you move through the chapters.
● Code Code listings display example source code used in scripts or programs.
● Callouts Callouts display helpful hints and notes about the example code, pointing to the
relevant lines in the code.
● Self Test Each chapter ends with a Self Test, a series of 15 questions to see if you have
mastered the topics covered in the chapter. The answers to each Self Test can be found in
the appendix.

That is it! You are now familiar with the organization and special features of this book to
start your journey through JavaScript. If you find that you are stuck and need help, feel free to
contact me with your questions. To contact me, you can reach me on LinkedIn (https://www
.linkedin.com/in/john-pollock-82a2b074) or you can find me on Twitter (@ScripttheWeb).
Now it is time to learn JavaScript. Get ready, get set, and have fun!

00-FM.indd 18 17/09/19 5:33


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1
Introduction to JavaScript

01-ch01.indd 1 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

2 JavaScript: A Beginner’s Guide

Key Skills & Concepts


● Using Text Editors, WYSIWYG Editors, and Web Browsers
● Defining JavaScript
● Differences Between Client-Side and Server-Side Programming

W elcome to JavaScript: A Beginner’s Guide, Fifth Edition! You’re obviously interested in


learning JavaScript, but perhaps you’re not sure what you need to know to use it. This
chapter answers some basic questions about what JavaScript is, provides a brief history of the
language, and discusses the various environments that can use JavaScript for programming.
JavaScript is ubiquitous on the World Wide Web. You can use JavaScript both to make
your Web pages more interactive, so that they react to a viewer’s actions, and to give your Web
pages some special effects (visual or otherwise). JavaScript can now even be used to perform
input/output operations or build Web servers by using Node.js!
JavaScript often gets included with Hypertext Markup Language (HTML) and Cascading
Style Sheets (CSS) as the three recommended languages for beginning Web developers
(whether you build Web sites for business or pleasure). Of course, you can build a Web page
by using only HTML and CSS, but JavaScript allows you to add additional features that a
static page of HTML can’t provide without some sort of scripting or programming help.

What You Need to Know


Before you begin learning about JavaScript, you should have (or obtain) a basic knowledge of
the following:

●● HTML and Cascading Style Sheets (CSS)


●● Text editors and Web browsers
●● The different versions of JavaScript
●● Differences in client-side and server-side programming

If you have this basic knowledge, you’ll do just fine as you work through this book. Knowing
another programming/scripting language or having previous experience with JavaScript isn’t
required. This book is a beginner’s guide to JavaScript.
If you think you don’t have enough experience in one of the aforementioned areas, a closer
look at each one may help you decide what to do.

01-ch01.indd 2 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 3

Basic HTML and CSS Knowledge


While you don’t need to be an HTML guru, you do need to know where to place certain
elements (like the head and body elements) and how to add your own attributes. This book
will reference scripts in the head section (between the <head> and </head> tags) and the body
section (between the <body> and </body> tags).
Sometimes, you will also need to add an attribute to a tag for a script to function properly.
For example, you may need to name a form element using the id attribute, as shown in the
following code:
<input type="text" id="thename">

If you know the basics of using tags and attributes, the HTML portion shouldn’t pose any
problems in learning JavaScript.
If you don’t have a basic knowledge of HTML, you can learn it fairly quickly through
a number of media. For example, you can buy a book or look for some helpful information
on the Web. A good book is HTML: A Beginner’s Guide, Fifth Edition by Wendy Willard
(McGraw-Hill, 2013). To find information about HTML on the Web, check out developer
.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started.
Occasionally, you will need to use CSS to add or change presentation features on a Web page.
We will mainly use CSS for the purposes of dynamically changing CSS properties via
JavaScript in this book. A good place to learn CSS is developer.mozilla.org/en-US/docs/Learn/
CSS/Introduction_to_CSS/How_CSS_works.

Basic Text Editor and Web Browser Knowledge


Before jumping in and coding with JavaScript, you must be able to use a text editor or HTML
editor, and a Web browser. You’ll use these tools to code your scripts.

Text Editors
A number of text editors and HTML editors support JavaScript. If you know HTML, you’ve
probably already used an HTML editor to create your HTML files, so you might not have
to change.
However, some HTML editors have problems related to adding JavaScript code (such as
changing where the code is placed or altering the code itself when you save the file). This is
more often the case when using WYSIWYG (What You See Is What You Get) editors. It is
best to use a code editor such as Sublime or Visual Studio Code (recommended) or a plain text
editor. Some examples of text editors are Notepad, TextPad, and Simple Text.

Web Browsers
Again, if you’ve been coding in HTML, you probably won’t need to change your browser.
However, some browsers have trouble with the newer versions of JavaScript. The choice of

01-ch01.indd 3 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

4 JavaScript: A Beginner’s Guide

Web browser is ultimately up to you, as long as it’s compatible with JavaScript. I recommend
the latest version of one of following browsers to test your JavaScript code:

●● Google Chrome
●● Mozilla Firefox
●● Microsoft Edge

New versions of these browsers continue to be produced. The newest versions will continue
to support more features.
To give you an idea of what some browsers look like, Figure 1-1 shows a Web page when
viewed in Chrome, and Figure 1-2 shows a Web page when viewed in Mozilla Firefox.
If you have an older browser and you can’t upgrade, a number of features (mostly discussed
later in the book) may not work in that browser. Even so, the book can still help you learn the
JavaScript language itself (especially when you’re using Node.js instead of a browser), so you
don’t need to give up if you have an older browser.

Figure 1-1 A Web page viewed in Google Chrome


 
01-ch01.indd 4 27/09/19 9:56
BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 5

Figure 1-2 A Web page viewed in Mozilla Firefox


 
NOTE
Even if you have one of the latest browsers, your web site viewers may not, so it
is always appropriate to understand what features may not be supported in older
browsers. This book will cover how to handle a number of these issues.

Which Version?
The version of JavaScript being used by a browser is typically associated with what version
of ECMAScript it supports. You can see what ECMAScript versions are supported by each
browser at kangax.github.io/compat-table/es6/.
ECMAScript is the international standard name and specification used for the JavaScript
language, so it’s not a new language but a standard that is set for JavaScript, JScript, and other
implementations of the language. For more on ECMAScript, see www.ecma-international.org/
publications/standards/Ecma-262.htm.
At the time of this writing, the browsers recommended earlier in this chapter should support
at least ECMAScript 7. Node.js uses the V8 JavaScript engine, and the latest version of Node.js
should also support at least ECMAScript 7.

01-ch01.indd 5 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

6 JavaScript: A Beginner’s Guide

Remember, It’s Not Java


JavaScript and Java are two different languages. Java is a programming language that must be
compiled (running a program through software that converts the higher-level code to machine
language) before a program can be executed. More information on the Java language can be
found at docs.oracle.com/javase/tutorial/.

Similarities to Other Languages


JavaScript does have similarities to other programming and scripting languages. If you
have experience with Java, C++, or C, you’ll notice some similarities in the syntax, which
may help you to learn more quickly. Because it’s a scripting language, JavaScript also has
similarities to languages like PHP—which can also be run through an interpreter rather than
being compiled.
If you have programming or scripting experience in any language, it will make learning
JavaScript easier—but it isn’t required.

Client-Side and Server-Side Programming


The addition of Node.js allows JavaScript to be run on the server side in addition to its traditional
space on the client side. Learning a little about these different environments will help you to
understand the type of programming that will need to be done when working on the client side
versus working on the server side.
A client-side language is run directly through the client being used by the viewer. In the
case of client-side JavaScript, the client is typically a Web browser. Therefore, client-side
JavaScript is run directly in the Web browser and doesn’t need to handle any requests on a Web
server. The limitation is that client-side JavaScript cannot directly save information (though it
can send information to a server-side program to do so).

NOTE
Using the XMLHttpRequest object and the Fetch API allows JavaScript to send and
request data from the server. These will be covered briefly in Chapter 14.

A client-side language is useful for tasks that deal with the content of a document or that
allow information to be validated before it is sent to a server-side program or script. For instance,
JavaScript can change the content of one or more elements on a Web page when the user clicks a
link or presses a button (many other user actions can also be activated).
JavaScript can also be used to check the information entered into a form before the form
is sent to a server-side program to be processed. This information check can prevent strain
on the Web server by not allowing submissions with inaccurate or incomplete information.
Rather than the program running on the server until the information is correct, that data can
be sent to the server just once with correct information. This also benefits the user, since
client-side validation can provide feedback much more quickly to allow the user to make any
corrections.

01-ch01.indd 6 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 7

NOTE
While client-side JavaScript is able to help validate information sent to the server,
it cannot replace server-side validation since users may have JavaScript disabled
or unavailable in the device being used (which allows them to bypass the client-
side validation). For security reasons, you should always use server-side validation,
regardless of whether or not you incorporate client-side validation.

For client-side JavaScript, the Document Object Model (DOM) is provided so that you can
access the different elements in a document. This is typically accessible within a browser for
HTML documents.
A server-side language runs on a server. For example, a server-side language can be used
to receive information from the user of a Web browser and then take an action using that
information. The server-side program can send information back to the Web browser, save it
to a database, or do any number of other things that the Web browser cannot do on its own.
However, a server-side language is likely to be limited in its ability to deal with special
features of the client that can be accessed with a client-side language (like the width of the
browser window or the contents of a form before it’s submitted to the server).
Traditionally, server-side programming was done in languages other than JavaScript,
such as PHP, Perl, Python, Ruby, Java, and a number of others. When Node.js came along, it
allowed the opportunity to use JavaScript on the server side in addition to the client side.
Depending on the needs of you or your company, you may or may not use Node.js, but this
book will cover it in order to provide a more complete introduction to the JavaScript language
and the different environments in which JavaScript can be used.

Ask the Expert


Q: You mentioned that I could use a text editor or HTML editor of my choice, but I’m
not quite sure what that means. What is a text editor and where can I find one?
A: A text editor is a program that you can use to save and edit written text. Text editors range
from simple to complex, and a number of choices are available: Notepad, WordPad, and
Simple Text, to name a few. You can also purchase and download some from the Web, like
NoteTab or TextPad.
An HTML editor is either a more complex text editor or an editor that allows you to
add code by clicking buttons or by other means—often called a What You See Is What You
Get (WYSIWYG) editor.
For the purposes of JavaScript coding, you may decide to use a more code-oriented
program that can offer features such as code highlighting, completion, debugging tools, and
more, such as Visual Studio or Sublime. I recommend one of these tools since they offer
more features to assist with programming.
(continued)

01-ch01.indd 7 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

8 JavaScript: A Beginner’s Guide

Q: What exactly do I need to know about using a text editor?


A: Basically, you only need to know how to type plain text into the editor, save the file with
an .html, .css, or .js extension, and be able to open it again and edit it if necessary. Special
features aren’t needed because HTML, CSS, and JavaScript files are made up of plain text,
but the features of coding tools like Visual Studio and Sublime can be extremely helpful as
you write HTML, CSS, and JavaScript code.

Q: What do I need to know about using a browser?


A: All you absolutely need to know is how to open a local HTML file on your computer (or on
the Web) and how to reload a page. If you don’t know how to open an HTML file from your
own computer, open your browser and go to the address bar. Type in file:///C:/ and press
enter. If you are using a drive letter other than C, type that letter instead of C in the example.
The browser will display files and folders from the drive and allow you to navigate to the file
you want to open. Click an HTML file to open it. The following illustration shows how this
might look after navigating into a few folders from the C drive using Google Chrome:

Q: Where do I get those browsers you mentioned?


A: Here are links for the browsers:
●● Google Chrome www.google.com/chrome/
●● Mozilla Firefox www.mozilla.com/firefox
●● Microsoft Edge https://www.microsoft.com/en-us/windows/microsoft-edge

01-ch01.indd 8 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 9

Beginning with JavaScript


JavaScript came about as a joint effort between Netscape Communications Corporation and Sun
Microsystems, Inc. The news release of the new language was issued on December 4, 1995,
back when Netscape Navigator 2.0 was still in its beta version. JavaScript version 1.0 became
available with the new browser. (Before its release as JavaScript, it was called LiveScript.)
JavaScript is a prototype-based interpreted language that can be used in numerous
environments. To expand on this definition, let’s look at its important parts one by one.

Prototype-Based
Prototype-based means that JavaScript is an object-oriented programming language that can use
items called objects. However, the objects are not class-based, so no distinction is made between
a class and an instance; instead, objects inherit from other objects via the prototype property.
JavaScript has made changes in ES6 to allow you to use the class keyword, but the language is
not technically class-based. You’ll learn how to work with JavaScript objects in Chapter 10. You
don’t need to understand them in detail until you know a few other features of the language.

Interpreted Language
An interpreted language doesn’t require a program to be compiled before it is run. All the
interpretation is done on-the-fly by the client. The client, such as a Web browser or the Node.js
environment, is what is being used to interpret the language.
With a compiled programming language, before you can run a program you have written,
you must compile it using a special compiler to be sure there are no syntax errors. With a
scripting language, the code is interpreted as it is loaded in the client. Thus, you can test the
results of your code more quickly. However, errors won’t be caught before the script is run and
could cause problems with the client if it can’t handle the errors well. In the case of JavaScript,
the error handling is up to the client being used by the viewer.

Numerous Environments
JavaScript can be run in numerous environments. Most commonly, the environment is a Web
browser since JavaScript has basically become the default scripting language used when
adding dynamic interactivity to a Web page.
While JavaScript is often thought of in relation to Web browsers, a number of other
environments use it for programming, such as Adobe Acrobat and Flash (based on ECMAScript).
In addition to this, Node.js allows JavaScript to be used as a server-side language or to perform
input/output operations on an operating system. This book will cover JavaScript in Node.js
and in the Web browser at a beginner level to help you get started with programming in both
environments.

Putting It All Together


To begin, you might wonder how JavaScript is run in a browser. Where should you write your
JavaScript code, and what tells the browser it is different from anything else on a Web page?
The answers are general for now, but the next chapter provides more details.

01-ch01.indd 9 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

10 JavaScript: A Beginner’s Guide

JavaScript runs in the browser by being added into an existing HTML document (either
directly or by referring to an external script file). You can add special tags and commands to
the HTML code that will tell the browser that it needs to run a script. When the browser sees
these special tags, it interprets the JavaScript commands and will do what you have directed
it to do with your code. Thus, by simply editing an HTML document, you can begin using
JavaScript on your Web pages and see the results.
For example, the following code adds some JavaScript to an HTML file that writes some
text onto the Web page. Notice the addition of <script> and </script> tags. The code within
them is JavaScript.
<html> This tag tells the browser
<body> that JavaScript follows
<script> This line writes the
document.write("This writes text to the page"); text inside the quote
</script> marks on the page
</body> This line tells the browser that
</html> this is the end of the script

The next chapter looks at how to add JavaScript in an HTML file by using the <script> and
</script> HTML tags. This will be your first step on the road to becoming a JavaScript coder!

Online Resources
To find additional information online to help you with JavaScript, here are some useful resources:

●● Projects/code for this book: github.com/JohnPollock/JSABG-ED-5


●● An excellent tutorial site that includes cut-and-paste scripts: www.javascriptkit.com
●● A place where you can address questions about JavaScript to fellow coders: stackoverflow
.com/questions/tagged/javascript

Try This 1-1 Use JavaScript to Write Text


pr1_1.html This project shows you JavaScript in action by loading an HTML document in
your browser. The script writes a line of text in the browser using JavaScript.

Step by Step
1. Copy and paste the code shown here into your text editor:
<html>
<body>
<script>
document.write("This text was written with JavaScript!");
</script>
</body>
</html>

01-ch01.indd 10 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 11

2. Save the file as pr1_1.html and open it in your Web browser. You should see a single line
of text that was written with JavaScript. (To open a file in your Web browser, go to the File
menu and look for an option that says something like Open, or Open File, and select it. You
should be able to browse for the file you want to open as you would with other programs.)

Try This Summary


In this project, you copied and pasted a section of code into a text editor and saved the file.
When you opened the saved file in your Web browser, a line of text was displayed in the
browser. This text was written in the browser window using JavaScript. You will see more
about how this type of script works in Chapter 2.


Chapter 1 Self Test
1. You must know which of the following to be able to use JavaScript in a Web browser?

A. Perl

B. C++

C. HTML

D. SGML

2. Which of the following is something you should have to use JavaScript in a Web page?

A. A Web browser

B. A C++ compiler

C. A 500GB hard drive

D. A DVD-RW drive

3. The choice of a Web browser is up to you, as long it’s compatible with __________.

A. Flash

B. VBScript

C. JavaScript

D. Windows XP

4. JavaScript and Java are the same language.

A. True

B. False

01-ch01.indd 11 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

12 JavaScript: A Beginner’s Guide

5. __________ is the international standard name and specification used for the JavaScript
language.
A. JScript

B. LiveScript

C. ECMAScript

D. ActionScript
6. JavaScript has similarities to other programming and scripting languages.

A. True

B. False

7. Before its release as JavaScript, JavaScript was called __________.

A. Java

B. JavaCup

C. LiveScript

D. EasyScript

8. JavaScript is __________.

A. prototype-based

B. class-based

C. object deficient

D. not a language that uses objects

9. A fancy code editor is necessary to edit JavaScript files.

A. True

B. False

10. In what ways can a fancy code editor help a JavaScript programmer?

A. It may offer features such as movies and video games.

B. It may offer features such as code highlighting, completion, debugging tools, and more.

C. It may offer features such as electronics repairs and warranties.

D. It can’t help at all.

01-ch01.indd 12 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 1: Introduction to JavaScript 13

11. A(n) __________ language doesn’t require a program to be compiled before it is run.

A. programming

B. server-side

C. interpreted

D. computer

12. JavaScript can only be used in a Web browser environment.


A. True

B. False

13. In JavaScript, what handles errors in a script?

A. The operating system

B. A compiler

C. A program on the Web server

D. The client

14. How is JavaScript added to a Web page?

A. It isn’t. It must be compiled and loaded separately.

B. It is taken from a compiled program on the server.

C. You place the code in a file by itself and open that file.

D. It is added to an HTML document.

15. What is added to a Web page to insert JavaScript code?

A. <script> and </script> HTML tags

B. The JavaScript code word

C. <javascript> and </javascript> HTML tags

D. <java> and </java> HTML tags

01-ch01.indd 13 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0
Blind Folio 4

This page intentionally left blank

01-ch01.indd 14 27/09/19 9:56


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2
Placing JavaScript
in an HTML File

15

02-ch02.indd 15 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

16 JavaScript: A Beginner’s Guide

Key Skills & Concepts


● Using the HTML Script Tags
● Creating Your First Script
● Using External JavaScript Files
● Using JavaScript Comments

N ow that you have been introduced to JavaScript, you’re ready to start coding. This chapter
introduces front-end (browser-based) JavaScript, while Chapter 3 will introduce how
JavaScript can be used with Node.js.
Since front-end JavaScript code is included in HTML documents, you need to know how
to tell Web browsers to run your scripts. The most common way to set off a script is to use the
HTML <script> and </script> tags in your document. You can place your script tags in either
the head or the body section of an HTML document.
This chapter first shows you how to use the script tags to begin and end a segment of
JavaScript code. Then, you will get started creating and running your first scripts. At the end
of the chapter, you will learn how to add JavaScript comments to document your scripts.

Using the HTML Script Tags


Script tags are used to tell the browser where code for a scripting language will begin and end
in an HTML document. In their most basic form, script tags appear just like any other set of
HTML tags:
<script> Tells the browser where
script code begins
JavaScript code here
</script> Tells the browser where
script code ends

As you can see, there is the opening <script> tag, the JavaScript code, and then the closing
</script> tag. When you use just the basic opening and closing tags like this, almost all browsers
will assume that the scripting language to follow will be JavaScript.
In HTML, the script tag is not case sensitive. However, in XHTML, the script tag must be
in lowercase. JavaScript is case sensitive in all versions, so you will need to be more careful
with it. In this book, I will use HTML5 for the HTML code (even though HTML5 is not case
sensitive, I will write the tag and attribute names in lowercase). For the JavaScript code, I will
use the case that is needed for it to function correctly.
The <script> tag has six possible attributes: type, language (deprecated), charset, src, defer,
and async. These attributes give the browser additional information about when the script should
load, the scripting language, and the location of an external JavaScript file (if any).

02-ch02.indd 16 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2: Placing JavaScript in an HTML File 17

Identifying the Scripting Language


The scripting language between the opening and closing script tags could be JavaScript,
VBScript, or some other language, though JavaScript is almost always set as the default scripting
language in browsers. If desired, you can explicitly identify JavaScript as the scripting language
by adding the type attribute with the value of “text/javascript” to the opening script tag:
<script type="text/javascript"> Tells the browser the scripting
language will be JavaScript
JavaScript code here
</script>

NOTE
The type attribute in the opening script tag is required in XHTML in order for the Web
page to validate, but is optional in HTML.

In the past, the language attribute was used to identify the scripting language, but is ignored
in modern browsers and will cause the page to be invalid in XHTML and HTML5. It should no
longer be used.
The charset attribute, which allows for the character set of the JavaScript code to be specified,
is not recognized by most browsers and is not recommended.
You will see additional important attributes discussed in the following sections.

Calling External Scripts


Script tags allow you to call an external JavaScript file in your document. An external JavaScript
file is a text file that contains nothing but JavaScript code, and it is saved with the .js file extension.
By calling an external file, you can save the time of coding or copying a long script into each page
in which the script is needed. Instead, you can use a single line on each page that points to the
JavaScript file with all of the code.
You can call external scripts by adding the src (source) attribute to the opening script tag:
<script src="yourfile.js"></script>

This example calls a JavaScript file named yourfile.js from any HTML document in which
you place this tag. Be sure there are no spaces or code between the opening and closing script
tags, as this may cause the script call to fail.
If the script is extremely long, using the src attribute to add the script to multiple pages can
be much quicker than inserting the entire code on each page. Also, the browser will cache the
external JavaScript file the first time it is loaded, making subsequent Web pages that use the
script render faster. Using an external script is also helpful when dealing with page validation
and when trying to keep script code separated from markup (HTML) code. In addition, the src
attribute allows you to include other people’s script files as libraries in the very same way.
By default, script files are loaded in the order in which they are placed in the HTML code
(synchronously). There are some options for altering this behavior, which are described in the
next section.

02-ch02.indd 17 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

18 JavaScript: A Beginner’s Guide

Specifying when the Script Should Load


The last two attributes, defer and async, allow you to specify when an external script should be
loaded. These attributes are not fully supported by older browsers, or may behave differently,
so be aware that an older browser may not execute the script when it is expected to do so.

The defer Attribute


The defer attribute allows you to specify that an external script file should be loaded, but should
not execute until the page has completed parsing (the </html> tag has loaded). The following
<script> tag would defer the execution of the external JavaScript code:
<script src="file.js" defer></script>

NOTE
If you are using XHTML, set this attribute using defer=“defer”.

Support for this attribute is available in Internet Explorer 4+, Firefox 3.5+, and Chrome 7+.
Internet Explorer 4–7 will allow this attribute to work on inline scripts as well, but versions 8
and above only support this attribute on external scripts as other browsers do.

The async Attribute


When the async attribute is set, the page can continue to load without waiting for the script to
load, and the script will execute after it completely loads. Here is an example:
<script src="file.js" async></script>

NOTE
If you are using XHTML, set this attribute using async="async".

Support for this attribute is available in Firefox 3.5+ and Chrome 7+.

Using <noscript></noscript> Tags


One way of providing alternate content for those viewers without JavaScript (or with JavaScript
turned off) is to use the noscript tag. The <noscript></noscript> tags may be placed anywhere
in the HTML document and can contain any content needed for those viewers browsing without
JavaScript. For example:
<script>
Displays for those viewers
document.write("The color is red."); with JavaScript
</script>
<noscript> Begins noscript content for those
viewers without JavaScript
The color is red.
</noscript> Ends noscript content

This example displays the phrase “The color is red.” to the viewer either through JavaScript
or through the text within the <noscript></noscript> tags.

02-ch02.indd 18 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2: Placing JavaScript in an HTML File 19

CAUTION
Some older browsers may not handle the noscript tag correctly and won’t display the
content in either section. If your users have older browsers, another alternative is to
display the content on the page and then use JavaScript to enhance the content for
those who are able to display it with JavaScript on.

The <noscript> tag can be useful at times, but there are often better ways to provide the
same content to those without JavaScript (avoiding the document.write() method, for instance).
You will learn more about accessible JavaScript as you progress through this book.

Ask the Expert


Q: Do I always need to use script tags to add JavaScript to a page?
A: It’s possible to use event handlers that allow you to write short bits of script within the
event-handling attribute of an HTML tag. You’ll learn about event handlers in Chapter 13.

Q: What about the language attribute?


A: The language attribute once was used to specify the scripting language to be used,
and for a time some browsers allowed a JavaScript version to be specified (for
example, language=“JavaScript1.2”). This is no longer the case, and the attribute has been
deprecated. Since it is completely ignored in modern browsers and causes pages not to
validate in XHTML and HTML5, it should no longer be used.

Q: My page won’t validate in XHTML strict (or transitional) when I add a script to it.
How do I get the page to validate?
A: If the script contains characters used in XHTML such as < (which is used for “less than”
in JavaScript but is seen as the beginning of a new tag in XHTML), then the page won’t
validate with the script directly in the document without adding a CDATA section:
<script>
<![CDATA[ Begins the CDATA section
var x = 5;
var y = 10;
if (x < y) {
window.alert("x is less than y");
}
]]> Ends the CDATA section
</script>
(continued)

02-ch02.indd 19 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

20 JavaScript: A Beginner’s Guide

This will allow the page to validate, but because the <![CDATA[ and ]]> characters
are in the script, the script will no longer work. To fix this, you need JavaScript comments
(/* and */) around those characters when they are within the script tags:
<script>
Opening and closing JavaScript comments
/*<![CDATA[*/ are placed around <![CDATA[
var x = 5;
var y = 10;
if (x < y) {
window.alert("x is less than y");
}
Opening and closing JavaScript
/*]]>*/ comments are placed around ]]>
</script>

As you can see, this can get quite tedious very quickly! Typically, the better option is to
use an external script file if you are using XHTML, which eliminates this problem because
only the script tags themselves are needed in the XHTML document.

Creating Your First Script


Now that you know how to use the HTML script tags to tell browsers about the JavaScript in
a document, you’re ready to learn how to add the actual JavaScript code between those script
tags. The first coding example often given to teach any language is one that writes some sort
of text to the default output area, commonly known as a basic “Hello World” script. Following
that convention, your first script will write a string of text to a Web page.

Writing a “Hello World” Script


Rather than write “Hello World,” you’ll use another line of text for this script: “Yes! I am now a
JavaScript coder!” This requires only a single line of code, using the document.write() method,
which writes a string of text to the document:
<script>
document.write("Yes! I am now a JavaScript coder!");
</script>

Notice the parentheses and the quotation marks around the text. The parentheses are required
because the document.write() method is a JavaScript function, which takes an argument contained
in parentheses. You will learn more about JavaScript functions in Chapter 5.
The quotation marks denote a string of text. A string is a data type defined in JavaScript
by placing the value inside quotation marks. Chapter 4 provides details on strings and other
JavaScript data types.
The last thing to notice about your script is the semicolon at the end of the line. The
semicolon signals the end of a JavaScript statement. A statement is a portion of code that does
not need anything added to it to be complete in its syntax (its form and order). A statement can
be used to perform a single task, to perform multiple tasks, or to make calls to other parts of

02-ch02.indd 20 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2: Placing JavaScript in an HTML File 21

the script that perform several statements. Most JavaScript statements end with a semicolon, so
it is a good idea to get in the habit of remembering to add one.

NOTE
In later chapters, you will see various lines that do not end in semicolons because
they open or close a block of code. Also, many scripts you encounter may not end
statements with semicolons. JavaScript is lenient about the use of a semicolon in most
cases; however, it is best to use the semicolon to end a statement because it can prevent
possible errors and aid in debugging (removing errors from) the script later.

So, to write a text string to the page, you use the document.write() method, followed by the
text, surrounded by quotation marks and enclosed in parentheses. End the line (the statement)
with a semicolon. JavaScript will handle the rest of the job.

Creating an HTML Document for the Script


In order to make this example complete and test the script, you need to insert it into an HTML
document. First, create the following HTML document with the basic tags (using any text
editor you prefer):
<!DOCTYPE html>
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
Save the document as test1.html in your text editor. You will open it later with a Web
browser to see the results of the script. Next, you’ll add your JavaScript code to this HTML
document, so leave the file open.

Inserting the Script into the HTML Document


Now you need to insert the script in the document. Where should it go? You can place a script
between the <head> and </head> tags, or between the <body> and </body> tags. Since this
example writes a text string directly to the page, you want to insert the script between the
<body> and </body> tags, wherever you want the text string to appear. It can come before,
after, or between any HTML code on the page.
To make it clear how the script results appear, you’ll add HTML code to write lines of text
before and after the script. The script tags and the script itself are inserted between those lines.
Add the lines shown next between the <body> and </body> tags:
<p>This is the first line, before the script results.</p>
<p>
<script>
document.write("Yes! I am now a JavaScript coder!");
</script>
</p>
<p>This line comes after the script.</p>

02-ch02.indd 21 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

22 JavaScript: A Beginner’s Guide

Figure 2-1 The test.html file in a Web browser


 
Save the test1.html document again. You should now be able to open the document in your
Web browser to see the results of the script. Figure 2-1 shows how the text should look in your
browser when you load the Web page.
Congratulations, you have now finished your first script!

NOTE
The example code in this section uses the entire HTML document and all of its tags. In
order to keep things as relevant as possible, from this point on the example code will
use only the HTML tags involved with the scripts rather than the entirety of its tags.
Project code may use entire HTML documents as needed.

Ask the Expert


Q: Why is there a dot (.) in the document.write() command?
A: Document is one of JavaScript’s predefined objects, and write() is a predefined method
of the document object. The dot puts the object and the method together to make the
function work. Chapter 10 explains JavaScript objects, and Chapter 13 introduces front-end
JavaScript and the document object in more depth.

Q: How do I know when to add the script inside the head section and when to add it
inside the body section?
A: In the past, JavaScript code was almost always placed inside the head section, which kept it
in a separate area from the rest of the HTML code. Modern coding practice is typically to
place all JavaScript code in an external .js file and to place the <script> tag(s) right before
the closing </body> tag. This ensures that the HTML page has loaded in the browser (since
large scripts can delay the loading of the page if placed elsewhere), giving the user a better
experience.

02-ch02.indd 22 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2: Placing JavaScript in an HTML File 23

Try This 2-1 Insert a Script into an HTML Document


pr2_1.html This project gives you practice adding a script to your page. You will create an
HTML document and insert a script that displays a short sentence in the browser
window when the page loads.

Step by Step
1. Set up an HTML document so that you have a simple file with nothing between the <body>
and </body> tags yet.
2. Put the following line of text into the Web page within a <p> tag:
I am part of the HTML document!
3. Insert a <p> tag after this line.

4. After the <p> tag, insert a script that will write the following line on the page:
This came from my script, and is now on the page!
5. After the script, add a </p> tag. Add another opening <p> tag.

6. Put the following line of text into the Web page after the last <p> tag, and make it
emphasized (using <em></em> tags):
I am also part of the HTML document, after the script results!
7. Add a </p> tag to complete the paragraph.

8. Here is what your HTML document should look like:


<!DOCTYPE html>
<html>
<head>
<title>JavaScript Project 2-1</title>
</head>
<body>
<p>I am part of the HTML document!</p>
<p>
<script>
document.write("This came from my script, and is now on the page!");
</script>
</p>
<p><em>I am also part of the HTML document, after the script results!</em></p>
</body>
</html>

9. Save the file as pr2_1.html and view the page in your browser to see the results.

(continued)

02-ch02.indd 23 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

24 JavaScript: A Beginner’s Guide

Try This Summary


In this project, you created an HTML file. Using the knowledge that you acquired thus far in
this chapter, you inserted within the HTML file a script that writes a specific line of text on the
page. When the HTML page is opened in a Web browser, the result of the script is displayed
between two lines of text.

Using External JavaScript Files


Now suppose that you want to use your “Hello World” script (the one you created earlier in this
chapter) on more than one page, but you do not want to write it out on each page. You can do this
by putting the script in an external script file and calling it with the src attribute of the script tag.
For this method, you need to create a JavaScript text file to hold your script. You also need one or
more HTML files into which you will place the script tags to call your external script file.

Creating a JavaScript File


For this example, you will create a JavaScript file that contains only one line. For practical
applications, you would use this approach for lengthier scripts—the longer the script is, the
more useful this technique becomes (especially if you are trying to validate your Web pages or
you are separating your script code from your markup).
Open a new file in your text editor and insert only the JavaScript code (the document.write()
statement) itself. The script tags are not needed in the external JavaScript file. The file should
appear like this:
document.write("Yes! I am now a JavaScript coder!");

Save the file as jsfile1.js in your text editor. To do this, you may need to use the Save As option
on the File menu and place quotation marks around your filename, as shown in Figure 2-2 (using
Notepad with Windows). If you are using an editor such as VS Code or Sublime, you won’t need
to add quotes around the filename since .js files are already supported.
Once the file has been saved, you can move on to the next step, which is to create the HTML
files in which to use the script.

Creating the HTML Files


You will create two files in which to place your script. The technique should work for any
number of HTML files, though, as long as you add the required script tags to each file.
For the first file, create your base HTML document and insert the script tags into the body
section of the document, using the src attribute to point to the jsfile1.js file, and add some HTML
text to the body of the page to identify it as the first HTML document:
<body>
<script src="jsfile1.js"></script>
<p>
This is page 1, and the script works here!
</p>
</body>

02-ch02.indd 24 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

Chapter 2: Placing JavaScript in an HTML File 25

Figure 2-2 An example of saving a file with a .js extension using quote marks so it will save
 
with the correct file extension

Save this file as jsext1.html in your text editor. Be sure to save it in the same directory as
your jsfile1.js file.
The second HTML document looks the same as the first one, except that the HTML text
says that it’s page 2:
<body>
<script src="jsfile1.js"></script>
<p>
This is page 2, and the script also works here!
</p>
</body>

Save this file as jsext2.html in your text editor. Again, be sure to place it in the same
directory as the other files.

02-ch02.indd 25 27/09/19 10:05


BeginNew-Tight / JavaScript: A Beginner’s Guide, Fifth Edition / Pollock / 768-0

26 JavaScript: A Beginner’s Guide

Figure 2-3 The result of calling the script in the jsext1.html file, the first HTML page
 
Viewing the Pages in Your Browser
Open the jsext1.html file in your Web browser. It should appear as shown in Figure 2-3, with
the JavaScript inserted in the page from the external script file.
Next, open the jsext2.html file in your Web browser. It should appear as shown in Figure 2-4,
with only the small difference of the text you added to the HTML file to say that this is page 2.
The JavaScript should write the same text to this page as it did to the first HTML page.
Although we used a short script in this example, it should give you an idea of how using an
external file could be a great time-saver when you have a large script.

Figure 2-4 The result of calling the script in the jsext2.html file, the second HTML page

02-ch02.indd 26 27/09/19 10:05


Discovering Diverse Content Through
Random Scribd Documents
jokisuvannolla uiskentelee musta mykkä ja loiskahtelee
hopeanhohtava lohi yöperhoa tavotellen…

Mutta mitä varten kaikki tämä luonnon kauneus ja pohjolan kesän


lyhyt hurma, jos ei Mirjam siitä nauti, jos ei Mirjam, minun elämäni
valittu, siitä nauti eikä nauttia saa?…

Orjo oli kummallisessa sieluntilassa. Hän tajusi ikäänkuin puolittain


vain että oli lähtenyt yksin pitkälle matkalle ilman todellista
päämäärää. Ja kuta kauvemmas hän ehti, kuta etäämpänä mies älysi
olevansa sieltä, missä hänen sydämensä oli hautonut elämän onnea,
sitä surullisemmaksi hän muuttui, sitä aremmaksi ja orvommaksi
itsensä tunsi. Ajoiko hän uhmaten takaa saavuttamatonta ihannetta?
Jo ennen merilaivaan astumista hänet yllätti kotiseudun kaiho ja hän
piti itseänsä puolihulluna että aikoi muka Sveitsiä ja Rheiniä
ihailemaan hän, Ulpukkasaaren erakko.

Mitä varten, mitä varten? Kannattiko hänen elämässään enää


mikään — sen jälkeen kun hän oli tehnyt ikävän havainnon omasta
kohtalostaan, sen jälkeen kun Mirjam ei enää hänelle merkinnyt sitä,
mitä vaimon piti merkitä rakkautta janoavalle miehelle? Mirjam häntä
rakasti — tavallaan — mutta se ei häntä tyydyttänyt: oliko hän
puolestaan koskaan asettanut sydämelleen kysymystä, tyydyttikö
Mirjamia Orjon lainen mies? Ajattelipa mitä tahansa, tulos oli aina
sama: heidän, Mirjamin ja Orjon välit eivät olleet kirkkaat, eivät
olleet varmat eivätkä lujaa tulevaisuutta ennustavat. Ja kuitenkin oli
Orjonkin puolelta olemassa niin sanomattoman paljon kiintymystä
vaimoonsa, luottamusta, jota ei voinut itseltään kieltää.

Hän tunsi sen joka kerta, kun matkaltaan lennätti viestejä


erämaiseen kotiinsa.
Lübeck 11 p. heinäkuuta

Mirjam!

Hirveän meritaudin kuvaamattomissa tuskissa, rikkona ja


paikaltani pääsemättömänä värisi herpautuneiden aivojeni läpi kaikki
se ihmisonnettomuus, mikä aiheutuu terveyden puutteesta. Silloin
älysin, kuinka sanomattoman paljon pyhää ja hyvää pelastaa
itselleen se ihminen, joka harrastaa terveytensä hoitoa. Ja muistin
surulla kaikkea, mikä on laiminlyöty meidänkin kesken — Sinunkin
puolesta. Oi, minä olisin tahtonut silloin huutaa sinua henkesi
herkimpään korvaan: ole oman onnesi seppä, älä tee mitään, minkä
tiedät hiuskarvaakaan vievän sinua pois terveydestä. Terveys on
kultaa, se on elämän voimaa, se — naisessa — on elämän
kauneutta. Sille kauneudelle ainoastaan mies ihanaa arvon antaa,
ruumiin terveydelle, josta sielun ilmiöt ehdottomasti riippuvat; se se
lopuksikin voittaa, kaikki muu haihtuu…

Muistin, kuinka meistä kuka tahansa saapi kuolla kurjiin vaivoihin


ilman että toinen on lohduttamassakaan. Mutta joka jo alussa on
terveydenhoidon oivaltanut, hän välttää kamalimmat karit. Me emme
saisi elämässä nauttia — terveytemme kustannuksella, sillä sitä
suurempi on kärsimys. Jos onnistumme terveiksi tulemaan — ja niin
käy, jos tahdomme — niin me totisesti löydämme parhaimmat
nautinnot.

Mitä minä täällä teen, valeterve mies, joka väliin ei kykene


kahteen vuorokauteen syömään yhtä lusikallista maitoa ja jota
pyörryttää mieto sikaari? Mitä minä täällä teen, Ärjän seljän soutaja?
Vieras maa, vieras kieli! Mainiot kauppamakasiinit, mitä ne minuun
kuuluvat? Ja ulkonaisesti iloiset ihmiset: Ei ole ystävää — minulla.
Enpä uskonut että saksalainen rantakaupunki jo saattaa olla niin
pulska paikka ja hienoasuinen. Saksassa näyttää pennikin olevan
arvossa pidetty ropo, ei kuten meillä siellä korvessa. Näkyisi täällä
olevan naistavaraa… No, tämähän onkin koematka minulle. Mutta
miksi sinulle kirjoitan? Minä —? Me, jotka… Voi Jumala ettei voi
pyyhkäistä pois todellisesti elettyä. Ja eikö se voi muuttua? Vai onko
samantekevää jos mies joutuu hornan tuuttiin? Kuka kiinnipitää?

Rakkaat ovat minulle lapset. Niiden puolesta pelkään. Ja rukoilen


sinua: kärsi, ole kiitollinen! Ettei kävisi kuten ensin. Sitä en kestäisi
— minä.

Lienen väsynyt mies. Lienee liika huima hyppäys äärimmäisestä


erämaasta Saksan rannoille viidessä vuorokaudessa. Levähdän yön
hotellissani ja huomenna koetan matkustaa Hamburgiin.

Sinua ja lapsia kaitselmus pyhä suojelkoon.

Rhein-virralta, laivan kannelta.

Rakas Mirjam!

Kuutamoilta ja kypsyvät viinitarhat, tuhansia vilkkuvia tulia


mustassa virrassa, satoja ritarilinnoja huimaavassa korkeudessa.
Saksalaisten ylioppilasten laulua: Ich weiss nicht was soll es
bedeuten dass ich so traurig bin… Loreley-kallio sivuutettu… Tässä
istun, pohjolan koskien huurteinen mies, enkä tiedä mistä lienee
näin mieleni murheinen. Es ist eine alte Geschichte, että minä olen
parantumaton romantikko, joka tietysti kaipaan sitä prinsessaa,
jonka tänä yönä ryöstäisin tuolta jostakin korkealta, mutta pelkään
että jos moiselle retkelle lähden, noista ritarilinnojen reijistä lentää
vastaani vain naakkoja ja haikaroita.

Mirjam! Tämä on helvetin ikävää, kun mies näin matkustaa


yksikseen, tämä on jo idiotismin rajoilla ja, tuota ajatusta
tukahduttaakseni, juon tietysti kolme juomalasillista hapanta viiniä
mukautuakseni turistien tuhmiin tunnelmiin. Minulla on kirvelevä
kaiho, sillä mitä hittoa aviomies yksikseen tekee Rheinillä? Ja kysyä
sopii: olisiko siinäkään enempi järkeä, jos kahden matkustaisi?

Zürich, 17 heinäkuuta, sunnuntai-aamu.

Rakas Mirjam! Kirjoittelen kirjeitä ehkä liian paljon, en tiedä


itsekään, miksi pitää kirjoittaa. Niitä mahtaa tulla tukuttain sinne
yhdessä postissa, mutta minulle jokainen tunti on kuin kokonainen
uusi päivä. Mitäpä muutakaan osannen tällä panoraama-matkallani.
Tietysti voisin kirjoittaa sanomalehtiin ja ansaita rahaa, mutta en tee
sitäkään.

Niin. Minusta on koko Saksanmaa satua, sen kaupungit


hämmästyttävät, sen Rhein-joki suurenmoinen ja sen kulttuuritaso
ihmeteltävä. Ihmeellisintä on se, etteivät ihmiset täällä, kuten
Suomessa näytä käyttävän väärin nautintoaineitaan. Ei kukaan
kiroile, ei kukaan riitele. Kaikki menee hienossa järjestyksessä.
Rautatieasemat kaikkine mukavuuksineen ovat ensin merkittävät.
Sieltä löytyy kaikki mitä ihminen tarvitsee — paitsi rakkaus.

Ja kaikki ilmestyy automaattisesti, tarvitsee vain pudotella


kymmen- ja 25-pennisiä rakoihin, niin lähtee sekä voileivät että
desäärit. Koko Mosel-virran — viinin muodossa — voi saada
juoksemaan kranasta suuhunsa, ken vain syöttää rakoa ja samoin
kai koko Rhein-virran voi juoksuttaa vatsaansa. Sanoin että
automaattinen kehitys täällä saavuttaa satumaisen huippunsa. Kuka
tietää vaikkapa vielä sattuisi eteeni sellainenkin paikka, jossa
pudottamalla peililasien väliseen rakoon kultarahan, miehen eteen
liukuisi se ihana prinsessa, jota pohjolan herra ritari hakee. Tai saisi
nähdä Muhammedin paratiisin ja kylpeä mantelimaitovirrassa. Jo
Frankfurt am Mainin Keisarikatua kulkiessa muistan eräässä
akkunassa nähneeni paratiisin päänaluksen luultavasti saman, jota
Eva neitsyt käytti nukkuessaan sillä aikaa kun Jumala valmisti
Aadamia aviosyleilyyn. Paradieskopfkissen! Kyllä sieltä olisi saanut
vaikka kultaiset töppöset.

Kummallista saapua Sveitsiin. Pikajuna kiiti läpi loppumattomien


viinimäkien, ja kuule Mirjam: siellä riippui melkein luonnollisessa
koossa Kristus ristinpuulla viinitarhojen keskessä. Hehkuvan kuuma,
sininen auer leijaili ilmassa. Maisemat olivat meheviä. Vuoria,
kukkuloita, syviä laaksoja. Niin saavuin Baseliin, jonka Sant Gotthard
hotellissa huomiotani herättivät ihanat ikkunalasimaalaukset.

Tiedätkös mitä on saksalainen vuode? Se on lumivalkoinen vuori


paljaita untuvia. Sinulle sopiva! Minulle ei! Sillä minusta se on
suoraan sanoen — aistillisuuteen ja hekumallisuuteen viettelevä.
Baselista ajoin tänne Zürichiin. Päivä oli hirveän kuuma, päätä
pyörrytti, paita ihossa kiinni, tuon tuostakin sukelsi pikajuna
kallioiden sisään ja kaikki pimeni ympärillä. Luulen että me menimme
monta kilometriä maan alitse, kallioiden läpi. Siitä arvaat, kuinka
huimaavan korkeat ovat vuorimaisemat. (Muistatko kuinka
häämatkallamme iloisessa maassa otimme suukkoja tunnelissa?)
Zürichin asemalle saavuttua olin peräti väsynyt ja tuska sydämessä.
Siinä hirveässä vilinässä kaiken maailman kansallisuuksien keskessä
piti minun toimia täydellä järjellä saadakseni ensinnäkin ranskalaista
rahaa kukkaroni täyteen, sitten ruokaa, sitten tavarat säilyyn, sitten
hotellin tietooni j.n.e. Olin niin väsynyt että tuskin pysyin seisaallani,
mutta viiniä saatuani tulin tietysti huumaukseen. Siitä oli se hyvä
että uskalsin ruveta puhumaan kielillä ja kielillä puhuminen vei minut
vihdoin taivaan portille: kirjoitan tätä kirjettä 600 metrin
korkeudesta, Zürichin hienoimmasta matkailijapalatsista. En osaa
sanoin kuvailla hotellin loistoa ja luonnon ihanuutta. Puistot, soitot,
kukat, sähkövalot, terrassit — kaikkialla tyyliä.

Kirkonkellot kaikuvat sinisessä avaruudessa, et voi uskoa, kuinka


sointuvasti. Sinun, Mirjam kulta, pitäisi saada täällä asua yksi
päiväkään. Minä tahtoisin nyt levähtää, hengittää, miettiä ja
rauhoittua. Sehän on matkani tarkoitus. Jää hyvästi Mirjam.

München 21 p. heinäkuuta.

Mirjam!

Suurella vaivalla löysin eilen tässä isossa maailman kaupungissa


Haupt-Postin ja sain kirjeesi. Palatessani asuntooni yllätti kova sade
ja minä pakenin likimpään Restaurantiin ja koska en ollut syönyt
eilisillasta saakka ja nyt oli jo kello 5, tilasin härkäpaistia nälkääni.
Sattui olemaan hieno paikka. Join puoliskon jotakin Pitsporteria ja
tietysti viini nousi uupuneen uroon nivuksille. Niin luin kirjeesi ja se
tuntui hyvältä… Maailma tanssi silmissäni jossakin määrätyssä
tahdissa, sähkövalot vilisivät ja ulkona rankkasateessa automobiilit ja
raitiot kilisivät. Takanani kaukana puhuttiin kai ruotsia, rupesin
kuuntelemaan, mutta silloin herra ja rouva, vieraita kuten minäkin,
alkoivat puhua ranskaa. Eivät ehkä olleetkaan Suomesta, olin
huumeessani vähällä blaskata itseni. Hekin joivat viiniä kuten kaikki
täällä aterioidessaan tekevät. Sateen lakattua läksin kaupungille ja
jouduin Bayer-strasselle! Mikä ääretön liike kaduilla! Ja sitä korean
kapistuksen ylenpalttisuutta loistavissa makasiineissa, niin että jos
katsomaan rupeaa, ehdottomasti hullautuu. Eksyin, harhailin, kyselin
poliiseilta, neuvoivat kohteliaasti, mutta yhä eksyin. Vihdoin sentään,
aterioituani automaatissa, osuin yksityisasuntooni jotenkin
mitättömään pensiooniin. Siinä odotti minua taas tuo kirottu
saksalainen vuode — untuvia, valkoisia vuoria. Pidä akkuna auki, jos
korvasi kestää räminää ja jyryä läpi kesäisen yön! Satoja
automobiileja, sähkövaunuja ja kuormajättiläisvankkureita huristaa
ohi. Tänään sain aamiaisekseni kahvikupin, pari hyvin pientä
pullakikaraa ja niihin kuuluvat pari viiden pennin kokoista voilevyä.
Niin ja lisäksi 3 — sanoo kolme — sokeripalaa. Sepäs oli ravitseva
aamiainen pohjoissuomalaiselle! Pyysin lisää sokeria, tuotiin toiset 3
pientä sirua — voi pirua — jätin yhden emännälle.

Syöneenä miehenä kelpasi lähteä kaupungin merkillisyyksiä


tutkimaan.
Neue Pinakothek — Alte Pinakothek — älä luule niitä apteekeiksi —
National Museum — Baijerin Luonnontieteellinen museum j.n.e.
Niissä
näkee tämän maailman kehityksen Aatamin askeleista Zeppeliiniin
asti.

Kummallista että pääni kesti niin paljon yhdessä päivässä. Kuljin


varmaankin kolme kilometriä läpi salien, joissa on satoja
vahtimestareita. Huomenna jatkan näitä tutkimuksiani, joista tunnen
"kovasti viisastuvani." Kaupunkihan on täynnä kuninkaiden patsaita,
leijonia, suihkukaivoja, taivaan enkeleitä j.m.s. Münchenin
olutmaneesit ovat kuin myrskyävä Atlanti — niihin mahtuu myriaadi
seidelinjuojia. Mainiot viinipaikat naisille ovat nuo
automaattiravintolat — ajatteleppa Mirjam, jos siellä erämaassa olisi
petäjissä kranoja, joista helmeilevä viini loriseisi huomaamatta
kahvikuppiisi!

En puhu sinulle mitään samettipöksyistä enkä silkkipaidoista. Mikä


intohimo sekin ihmisessä lienee: tiedustella kaikissa Euroopan
kaupungeissa pohjolaiselle eukolleen — silkkistä paitaa! Muuten
soisin sydämeni pohjasta että kerran pääsisit viikoksi Müncheniin itse
— muutamia tuhansia taskussa. Osaan minäkin tuhlata niin kauvan
kuin kultakolikot helisevät. Pelkäänpä Sveitsin nurkalla menettäneeni
sata frangia päivässä. Hullu olen, tietysti tulee katumus, jahka raha
loppuu.

En minä epäsiveyttä täällä ole nähnyt, mutta enhän ole öisin


liikkeellä ollutkaan. Baijerin katoliikit lienevät paljon ihmisellisempää
väkeä kuin muiden saksalaisten kaupunkien asukkaat. Mutta enpä
ole vielä tavannut niin kaunista naista että olisin hullaantunut.

Tietysti vapautensa kukoistusiässä oleva, ikävöivä, kauneutta


turhaan janoova yksinäinen mies tulee maailman vilinässä
ajatelleeksi naistenkin seuraa, mutta minähän olen luonteeltani,
näissä asioissa naurettava raukka, nahjus ja hölmö. Mieleni on niin
surullinen. Enhän minä osaa nauttia suuren maailman elämästä enkä
vapaudesta. Ja lisäksi: sielulliset ristiriidat, alituinen hautominen:
seuraukset —?

Se on hyvä, sanoo joku. Itse sanon: olen onneton. Sillä mitä


minulla on odotettavissa lähimmässä tulevaisuudessa? Eikö karkea
kokemus todista jotain? Voiko suhde muuttua? Voinko parata? Ja
voitko sinä estää itsestäsi ne syyt, jotka mielestäni ainakin osaksi
heikkouteni aiheuttavat? Kärsin julmasti! Tuntuu kuin kuolisin,
vaikkapa sinne elävänäkin pääsisin. Kohtalo, kohtalo, kohtalo! Tulee
taas tukahduttava, ikävä yö — saksalaisessa vuoteessa: hirveä yöajo
akkunani alla; mitä pirua ne ajavat yöllä nuo Baijerin kuninkaat ja
portot? Laskeudun alas kadulle kävelemään viedäkseni tämän kirjeen
laatikkoon. Lapsilleni suudelma rakastavalta isältä. Ja sinulle, Mirjam,
suudelma

Orjolta.

Kun Orjo oli pudottanut kirjeensä postilaatikkoon, istahti hän


hetkeksi hämärään puiston penkille. Vieras maa kuhisi hänen
ympärillään ja hän vaipui mietteisiinsä. Yhtäkkiä hän havahtui siitä
että joku naisolento istuutui hänen viereensä ja alkoi häntä
puhutella. Orjo vilkasi naiseen, mutta käänsi heti katseensa suoraan
eteenpäin jääden kiinteästi tuijottamaan pimeyteen. Ja vaikka nainen
häntä yhä lähenteli ja kuiskasi hänelle jotakin, ei mies hievahtanut.
Silloin nainen ilkeästi nauraen nousi ylös ja läksi tiehensä.

Kiihkeästi tykyttävin sydämin, jollakin tavoin katkerana itselleen ja


koko maailmalle, palasi Orjo yömajaansa ja sukelsi vuoteeseensa.
Koko hänen ruumiinsa värisi ikäänkuin kylmässä. Siinä se taas oli
näyttäytynyt — tuo hänen elämänsä sfinksi, ilotyttö, jota hän inhosi.
Baijerin ilma huljui niin pehmoisena ja kepeänä hänen ympärillään,
Isarkoski välkähteli sähkövaloissaan, kiiltävillä, sulosointuisesti
soivilla umpinaisilla automobiileilla ajettiin ajamistaan hänen
akkunansa alla — mutta hän, lumisen maan mies, ei osannut nauttia
niinkuin olisi tahtonut. Tuo ikuinen ristituli — todellisuus ja
mielikuvitus!

*****

Hän sivuutti Dresdenin — sillä hänen kukkaronsa alkoi laihtua — ja


ajoi suoraan Berliniin. Satunnaisen matkatoverinsa, juutalaisen
ylioppilaan, seurassa hän kulki milloin kävellen, milloin
voimaomnibuksella ajaen, milloin maan alitse tai kattojen ylitse
junalla kiitäen ympäri yöllistä Saksan pääkaupunkia nähden kaikkialla
loistoa, suuruutta ja koneellista elämänmukavuutta. Mutta
Friedrichstrassen katuelämä häntä mietitytti — hänelle sanottiin että
tällä kadulla melkein jokainen naishenkilö oli rahalla ostettavissa.

Saattoiko maailma todella olla niin kevyt tai oikeammin: miksi se


oli niin raskas??

Hän tahtoi tutustua Berlinin mysterioihin, mutta — hän oli


luonteeltaan siihen mahdoton. Hän kirosi ihmisten siveettömyyttä ja
kirosi itseään — mitä hänellä, siveellisellä aviomiehellä, oli tekemistä
maailman turmeltuneissa markkinakaupungeissa. Joskus hän tunsi
naisten heittävän uteliaita silmäyksiä häneen, mutta hän ei niihin
kääntänyt huomiota. Väliin hän ihmetteli parittain kävelevien tyttöjen
nuoruutta, mutta sanoi itsellensä: mitäpä se minuun kuuluu?

Uupuneena sielultaan hän katujen vilinästä kiipesi hotelliinsa. Ei, ei


ollut hänestä kalaksi sameaan virtaan. Ja kuitenkin hän ikäänkuin
kirosi nuoren miehen aikaansa että oli ollut — liian siveä.

Kummallista! sanoi hän itselleen. — Minä kuljin kymmenen vuotta


pyhimyksenä, silloin kun se minulle oli vaikeinta, ja nyt ikäänkuin
tahtoisin saada takaisin tuon ajan, jolloin minusta itsestäni riippui,
olinko pyhimys vai syntinen. Kuinka perinpohjin mies voipi muuttua
siveelliseltä pohjaltaan! Piruko minua vaivaa? Lienen halvin
aviomiesten joukossa, kun saatan edes kuvitella muita naisia kuin
omaani!

Mutta kaikista erikoisinta tässä on se että pysyn loppuun asti


uskollisena hänelle!
Orjo Korelius muisti samalla pienet lapsensa ja lämmin virta täytti
hänen sydämensä. Ja hän kiitti Jumalaa että hänellä oli vaimo ja
lapset erämaan kätkössä.

Kukaties se sittenkin on elämän kalleinta kultaa — perhe-elämä


eristettynä maailmasta?

Hän nukahti hymyillen ja nukkui rauhallisesti.

Rakas Mirjam!

Luin kirjeesi Unter den Lindenillä. Kiitos! Se oli kaunis, kauniimpi


kuin mitä minun lienevät olleet. Joskus olen matkallani tahtonut
kirjoittaa hyvinkin synkän kirjeen. Entisyyden kokemus —
tulevaisuuden pelko.

Jääpi nyt kirjoittamatta. Mutta saanko minä milloinkaan oikein


levähtää? Ja saanko vielä koettaa, lähteekö minusta enää mitään, vai
onko kaikki lopussa? Siihen tarvitaan erityistä sielun rauhaa. Mutta —
minä pelkään. Heti tultuani alkaa elämä ahdistaa minua taloudellisilla
vaatimuksilla. Hyvä Jumala — minähän olen vain se mikä olen.
Jumala tietää etten minäkään ristissä käsin ole tahtonut istua.
Ihminen sentään on oikeutettu joskus lepoa nauttimaan. Varsinkin
surussa — suuressa, ikuisessa — ja ikuisessa taistelussa.

Mirjam! Miksikä sinun kirjeesi ovat aivan päinvastaiset kuin


todellisuuden vaikutus?? Siinä on minulle miettimistä.

Olen ristiriitaisissa tunnelmissa, minkä vaikuttaa osaksi se harmi


että olen — rahatta. Turhaan postista, tiedustin ja tiedustan yhä
rahalähetystä, joka oli tilattu tänne. Muuten ei minulla ole hätää,
vaan — eräät tuliaiset voivat jäädä ostamatta. Pois, pois! Berlin jääpi
jotenkin vähälle tutkimiselle. Ei minusta oikein tänne. Hurina hirveä,
ihmiset juoksevat. Alku oli lupaava, loppu huono. Ei ainoata tuttavaa.
Ja Berlinin saksalaisiin mahdoton tutustua. Nyrpeyden leima —
naistenkin nenien päissä.

Lapsilleni sydämen syleily. Isä palaa kotiin!

*****

Elokuun ihanat, pehmeät ilmat Perä-Pohjolassa ovat alkaneet.


Päivillä paistaa aurinko etelämaisen kuumasti ja vaahtoharjat laineet
välkkyvät marmorivalkoisina hypellen pitkin sinimustia järven
ulapoita. Rannat ovat vehmaimmallaan: koivut, raidat, lepät ja
pajupensaat koettavat kilvan peittää tumman rantarakon ja
kanervaisen manteren rajaviivaa. Yöt ovat hämärän hempeät, täynnä
tuoretta tuoksua, ja aamun kimmeltävä laine heleällä hiekkarannalla
on hekumallinen kylpeä. Linnunpoikaset ovat hilpeimmillään, marjat
makeimmillaan, kukat puutarhoissa loistavimmillaan — koko
luomakunta kukoistavimmillaan.

Mirjam lapsineen ja palvelustyttöineen viettää vapaata elämää


Ulpukkasaarella. Hän käy puettuna niin keveästi että elokuun
pehmeä ilma esteettömästi pääsee hyväilemään hänen ruumistaan,
ohi soutava taikauskoinen kalamies saattaisi häntä luulla saaren
haltiattareksi: valloillaan aaltoavat valkealla kaulalla pitkät suortuvat,
lyhyt on punainen hame ja helmojen alta vilkkuvat nilkat ja pienet
jalat.

Ja saaren haltiattarella on toverinaan pieni keijukainen,


hohtavasilmäinen, pellavapäinen tyttönen Maila. Yhdessä he käyvät
kylpemässä auringonpaisteisella rannalla, yhdessä he tutkivat
pikkulinnun pesiä, yhdessä poimivat marjoja ja kukkasia ja yhdessä
istuvat mäntyjen välisessä keinussa. Mutta joskus on Mirjamin sylissä
myös toinen, pienempi keiju, Sirkka, joka ei vielä osaa kävellä. Ja
keinu kesäinen heiluu ja nuori äiti laulaa sydänkäpysilleen
kauneimmat laulunsa:

Lapseni mun, lapseni mun,


Tuulan tuulan tei!
Nouse kiikku, sävel soi,
Laulan kunnes lakastun,
Lapseni mun, lapseni mun —
Muuta mulla ei!

Mirjam on onnellinen. Mutta silloin tällöin kesäpäivän


kirkkaimmillaan ollen hän yhtäkkiä säpsähtää ja katsahtaa
peljästyneenä ympärilleen: näkeekö kukaan häntä?

Mutta seuraavassa silmänräpäyksessä katkera varjo väistyy hänen


kasvoiltaan, hän väljentää hiukan hameensa miehustaa ja
kuljeskelee ympäri saarta avojaloin hyräillen kuin nuori tyttö. Elämä
on yhtäkaikki suloista.

Ja hän naurahtaa ääneen, kun huomaa aina vaan ja joka


askeleella muistavansa Orjoa.

"Hänelle minä kuulun ja nyt taas — sitä enemmän."

"Häntä rakastan."

"Oh! että naisen pitää… niin ikävöidä miestä!"

— Huhuu! Kuka huutaa?


Mirjam säpsähti yhtäkkiä omia ajatuksiaan ja kuulosti henkeään
pidättäen.

— Hoi! Hoooi! Tuokaa ve—nettä. Hoi! kuului ääni selvästi


vastapäiseltä rannalta.

Rouvan veret pysähtyivät hämmästyksestä. Ja vasta seuraavassa


silmänräpäyksessä hän ymmärsi ettei veneenhuutaja ollut kukaan
muu kuin Orjo, joka palasi ulkomaaretkeltään. Iloinen sykähdys kävi
läpi hänen ruumiinsa ja hän läksi juoksemaan pitkin saarta huutaen
palvelustyttöä.

— Katri, kierrätä vene. Minä tulen mukaan. Se on hän — Orjo.

Vene keikkui aalloilla. Mirjam ohjasi.

— Älä souda! pysäytti rouva palvelustyttöään. Hänestä oli yhtäkkiä


ruvennut näyttämään ettei, rantakivellä seisoja ollutkaan hänen
miehensä, vaan joku ventovieras herra. Tuollainen hieno
panamahattu päässä, korkeat kaulukset ja tumma mantteli —?

Ja Mirjamia kauheasti ujostutti punainen hameensa ja paljaat


jalkansa.

Mutta rantakivellä seisova herrasmies heilautti käsilaukkuaan ja


huusi:

— No, tule nyt vaan!

Se oli sittenkin hän, se oikea.

Orjo varjeli venettä töksähtämästä kiveen ja hyppäsi


kapsäkkeineen veneeseen.
— Päivää — päivää.

Orjoa harmitti, miksi ei Mirjam ollut saattanut soutaa yksikseen ja


samoin Mirjam huomasi vasta nyt tehneensä tuhmasti, että oli
ottanut palvelustytön mukaan.

Hän näet ujosteli suutelemasta miestään palvelustytön


läsnäollessa.

Kummallista, sanoi Orjo puolittain kuin itsekseen saapua Berlinistä


suoraapäätä Ulpukkasaareen? Et voi aavistaa Mirjam, miltä se
tuntuu!…

23.

Vähitellen, aste asteelta, pala palalta heidän elämänsä tuli


myrkytetyksi. Turhaan kumpikin teki hyviä päätöksiä, turhaan he
lukivat hyviä kirjoja, turhaan katselivat hyviä ihmisiä ja turhaan
rukoilivat Jumalaa. Turhaan he omaan epäsopuunsa tuskastuneina
vannoivat uutta rakkautta ja syleilivät toisiansa hetkien huumassa.

Turhaan oli Orjo tehnyt ulkomaanretkensä saadakseen voimia ja


rauhan näkökantoja — sietääksensä omia ja Mirjamin hermoja.

Ja turhaan odotti Mirjam taas lasta, jonka saamiseen kumpikin


suloisen sopusoinnun hetkenä oli sydämensä pohjasta suostunut
toivossa vielä kerran vastaanottaa poikalapsen iäksi kadotetun
esikoisen sijaan.
Kaikki turhaan! Avioliiton hengetär kuljetti heitä ikäänkuin kädestä
vetäen väkisin pitkin pimeitä polkuja, jotka kaartelivat pohjattomien
kuilujen reunoilla.

Yksi askel vain syrjään — ja ihminen olisi pelastumattomissa. Ja


kuitenkin heistä kummastakin tuntui että kaikki paha oli heidän
välillään vain pahaa unta ja että todellisuuden täytyi olla toinen.

Sillä tietysti he toisiaan rakastivat — sehän oli koettua, tunnettua,


nähtyä — tietysti he toinen toisensa parasta tahtoivat!

On marraskuun ilta. Orjolle on marraskuu jostakin syystä kaikista


kauhein kuukausi. Hänen synkkämielisyytensä on silloin niin raskas
ettei sillä ole enää rajoja. Hänestä tuntuu että kaikki loppuu, ettei
hän kestä omaa elämäänsä, jonka ikävän syyt hän löytää
ympäristöstään eikä koskaan itsestään, josta kuitenkin monet, ehkä
raskaimmat olisivat olleet etsittävissä!

Kaikki loppuu varmaan pian, sanoo Orjo itseksensä ja kauhistuu


oman tunteensa todellisuutta. Joko minä — taikka hän — taikka
molemmat… Hän ei tiedä selvästi, mutta jotakin hirveätä tapahtuu?

Ja silloin hänellä tulee sääli itseään. Jos nyt kuolen, sanoo hän
itselleen, niin ei kukaan osaa selittää, mikä sitä miestä vaivasi. Jospa
jätän selityksen, tunnustuksen, paljastuksen pöytälaatikkooni, niin
ainakin saavat vihiä.

Tuo ajatus tyynnyttää häntä hetkeksi, hän tarttuu siihen kuin


hukkuva oljenkorteen. Ei hän niin paljon omaa vaimoaan tarkoittanut
— raivosi yleensä avionsa onnettomuuden vuoksi omalta
yksipuolisella kannaltaan.
"Itselleni — jälkeenjääneille — kohtalon varalta." kirjoittaa hän
kuoren päälle ja sitten alkaa selitys, paljastus, aviomiehen purkaus.

Elämän hirmumyrskyissä… 8 p. marraskuuta.

Se ei ole totta, kuten yleisesti sanotaan, että aviomiehet ovat


häijyjä vaimoilleen. Se on verinen vääryys siinä suhteessa että syyt,
miksi aviomies voipi tulla julmaksi (ei häijyksi), lankeavat
ulkopuolelle miehen syyntakeisuutta.

Jos aviomies, vaimo, joka antautui avioliittoon rakastaaksensa


miestänsä ja tulevia lapsiansa, rikkoo avioelämän pyhintä sääntöä
vastaan, joka on yhteinen, alati näkyvä, alati jatkuva rakastava
käytös lapsia kohtaan; jos hän vuodesta vuoteen, päivästä päivään
ärsyttää omaa aviomiestään näyttämällä äidinoikeuden varjoa
miehen edessä, s.o.: tekemällä pahaa sanoilla tai käytöksellä lapsille,
joita mies ei minään silmänräpäyksenä salli loukattavan; jos hän
täten myrkyttää kodin päätunteen, jonka pitäisi olla kärsivällinen
sopusointu; jos hän täten, tuhansia muita pahoja lisäämällä saapi
aikaan niinsanotun kotihelvettitunteen aviomiehen rinnassa,
aviomiehen, joka on pettynyt ihanteissaan, niin silloin — jos aviomies
puolestaan unohtaa sopivaisuuden rajat ja sielunsa tuskissa esiintyy
järjettömänä petona järjestystä aikaan saadaksensa, silloin — hän
on oikeassa ja vaimo väärässä; miehen puolella on se totuuden
Jumala, joka näkee läpi ihmisten juonien. Hän sortuu ehkä
helvettiinsä, jossa hän omin käsin onnettomuutensa surmakiveä
liikuttelee, mutta — ikuinen syytös, syiden kiro, lepää hänen elämän
toverinsa petoksen tehneessä sydämessä.

Hän, nainen, raiskasi pyhän — siksi mies hävitti kodin viimeisenkin


mahdollisuuden. Naisella ei pyhinkään ollut pyhää — mies tahtoi
kaiken tai ei mitään. Mies tahtoi varjella avioliiton kukkia
polkeutumasta — lastensa hermoja äidin väärältä oikeudelta — siksi
traagillinen, ainoastaan syvien sielujen ymmärtämä kohtalon laki
pakotti hänet itsensä kiskomaan rakkaat kukkaset (lapset) juurineen
irti maasta. Mies itkee jo vuosia edeltäpäin nähden psykologiset
seuraukset siitä tai toisesta metoodista, nainen ei näe kuin lentävän
hetken: — siksi mies lentävässä hetkessä, kantaen hirmuisia
aavistusten, kuormia, raukeaa itsensä hillitsemisessä…

Syvimmin onnettomat, hienotunteisimmat sielut muuttuvat


sellaisissa avioissa, kuluttavan tulen uhreina, raakatuntoisimmiksi.

Miehellä, raivotessaan vihdoinkin petona, ei ole silmäinsä edessä


mitään muuta kuin särjetty ihanteensa: ihminen, joka häntä on
kiduttanut, on sekin vain paha aate, jonka hän uhmaa hetkessä
hävittää.

Hän kärsii hyvyytensä tähden — siksi hän muuttuu pahaksi


maailman silmissä.

Ulkonaiset tapaukset ovat kuitenkin toisarvoisia totuuksia.


Päätotuudet ovat sisäiset, ja mies, joka hyvän aatteen, ihanteensa
tähden, on sortunut pahaksi, on marttyyri, ei muuta, kuin elämän
marttyyri, viaton…

*****

Kolme päivää kului — eikä kumpikaan, ei aviomies eikä aviovaimo,


toivottanut toiselleen hyvää yötä eikä hyvää huomenta, vaan
kumpikin paadutti sydäntään. Eikä kumpikaan näiden päivien
kuluessa, ei ruokapöydässäkään, virkkanut toiselleen ystävällistä
sanaa, ainoastaan jonkun syrjäisen kuullen sanottiin muodon vuoksi
joku arkipäiväinen asia.

Vihdoin kävi tämä jännitys yli voimain ja vaimo hiipi itkien


miehensä vuoteeseen ja syleili häntä rajusti. Ja mies myös itki oman
elämänsä katkeruutta, mutta siunasi hellän hetken puuskaa antaen
ja saaden kaikki anteeksi. Sitten taas nousi pilviä. Vaimo osoitti
hermostusta lapsia kohtaan, ei jaksanut ottaa vastaan miehensä
tovereita eikä pitänyt miehensä esityksistä että vieraille täytyi antaa
erikoisissa tapauksissa ruokaa ja tarjota yösija.

— Koeta nyt rakas Mirjam tulla järkiisi! Minähän saan ihan hävetä
sinun tähtesi!

— Eivätkö voi mennä muualle! Minä en jaksa. Ja rouvan silmät


leimahtivat vihasta.

— Mutta muista nyt, rakas Mirjam, että ihmiselle on arvokkaampaa


olla ystävällinen niillekkin, jotka meitä kohtaan ovat epäystävällisiä.

Ei, minä en tahdo!

Silloin veret karkasivat aviomiehen kasvoihin ja hän raivostui. Ja


perhekohtaus tapahtui…

Orjo sulkeutui huoneeseensa ja läähätti kiihkeästi. Hänen


ensimäinen ajatuksensa oli ampua itsensä. Sitten häntä äkkiä väsytti
ja hän nukahti pöytäänsä vasten.

Ei kummaltakaan puolelta tapahtunut lähestymistä moneen


päivään. Päinvastoin: poistyöntämisen tunne yhä paisui.
Lastenhuoneessa tapahtui joka päivä surkeita näytelmiä —
raskaudentilassa oleva naisparka siellä purki elämänsä katkeruutta
pikkutyttöihin, jotka eivät osanneet olla äitinsä mieliksi.

Orjo oli mielellään lastensa kanssa. Hän piteli niitä sylissään,


hyväili hellästi, kiikutteli jalallaan ja konttailikin leikkien. Mutta äiti
ikäänkuin ei ollut sitä huomaavinaan. Hän jatkoi menettelyään ja oli
aviomiehen mielestä järjetön menettelyissään.

Kun ukkosenilmaa oli jatkunut viikon päivät, silloin Orjo taas tarttui
kynäänsä ryhtyen tekemään selkoa asemasta. Vaikka hänen
vaimonsa oli raskaudentilassa, joka selvitti paljon, ei hän voinut olla
tekemättä ankaria syytöksiä.

Suru on tuhat kertaa arvokkaampi asia kuin kotihelvetti! — kirjoitti


hän. Joko sinun tai minun on edes lyhyeksikään aikaa lähdettävä
talosta!

Sinä olet ärsyttänyt minun kärsimykseni siihen huippuun ettei


minulla kohta ole muuta jälellä kuin rientää lopettamaan onneton
sisäinen elämäni rakkaimpani pyhimmällä haudalla…

Minä en ole nukkunut taaskaan moneen yöhön hirveän


hermojännityksen ja kurjan vihan takia. Tietäköön koko maailma,
että kun minä vihaan huonoja ominaisuuksia, vääriä tekoja tai
halpaa menettelyä, minulle ei merkitse mitään, kuka joutuu vihani
alaiseksi.

Tuhansia kertoja olen sinua varoittanut sinun nykyisestä


helmasynnistäsi, joskus harvoin olet sinä vikasi tunnustanut, mutta
heti taas siihen sortunut.
Sinun helmasyntisi, juuri se vika, mikä tekee minut onnettomaksi,
avuttomaksi ja kurjaksi aviomieheksi, on sanoilla sanottuna (vaikka
ei kuvattuna) tämä: Sinä et kestä elämän arkea! Sinä vaatisit että
ympärilläsi aina olisi sunnuntain vapaus, sinä tahtoisit päästä
helpolla. Lasten muka pitäisi olla semmoiset ja semmoiset, vaan ei
sellaiset kuin todella ovat. Sinä olet pienimmissäkin
vastoinkäymisissä tuskainen, sinä kadotat kymmenesti päivässä
kärsivällisyytesi, malttisi, järkesi ja itsehillitsemiskykysi.

Kysymys ei ole nyt siitä, mistä ja milloin ihminen on siveellisesti


oikeutettu rankaisemaan lapsia, vaan siitä, miten, missä henki-
ilmakehässä, missä hermotilassa ja ennenkaikkea millä sanoilla ja
miten vaikuttavalla käytöksellä tuo kuritus tapahtuu. Sinä rikot
kauheasti elämän siveellisiä sääntöjä vastaan tekemällä jokaisesta,
huomaa jokaisesta alle 1-vuotiaan lapsen "virheestä" suuren
numeron. Sinä kostat — vaan et kasvata, kuten väität. Sinä seuraat
omia hermojasi etkä säästä lastasi, vielä vähemmän miehesi
hermoja. Omat hermot sinulla aina ovat etunenässä, niiden mukaan
komento tapahtuu. Kaikkialla vain sinä, sinä itse — hermostunut
riehuva egoismi.

Sinä olet väärin sanonut että minun läsnäoloni sinua kiihoittaa


olemaan liian kova lapsille. Minua poissa ollessani olet sinä
samallainen, joskus pahempikin juuri sentähden että saat muka
rauhassa tehdä niin kuin haluttaa.

Tämä sinun riehumisesi, alituinen, päivästä toiseen jatkuva,


useasti päivässä uudistuva hermostumisesi ja monilla tylyillä sanoilla
riehuminen lastesi kanssa — se on tehnyt minut kipeäksi, pilannut
minunkin hermoni, jotka eivät enää kestä pieniäkään koetuksia.
Samalla on se kasvattanut minussa kauhean pelon — minun täytyy
alituisesti aamusta iltaan olla varuillani ja peljätä vaimoani — omaa
vaimoani. Ymmärrätkö sinä, missä asti ollaan? Sinun velvollisuutesi
on hoitaa lapsia niin kauvan kuin he ruumiillisesti ja taloudellisesti
ovat likinnä äitiään, mutta sinä — aina kun pieninkään henkinen
arvostelu tapahtuu — pidät oikeutenasi vihastua ja tyrkyttää lapsia
isän hoidettavaksi. Sinä et tahdo ymmärtää rehellistä työnjakoa, sinä
tahdot aina vain kostaa ja päästä helpolla.

Minä rakastan lapsiani, minä rakastan niitä sielullisesti, melkein


intohimoisesti ja tiedän että ne ovat meidän hyvät hengettäremme
pahan maailman keskessä — sinä rakastat vain aika-ajoittain, et joka
hetki, sillä moninkertaisten hermostumisiesi hetkinä sinä et rakasta,
vaan työnnät pois.

Kalleimpamme, pyhimpämme, ainoimpamme!

Kunpa sinä kerrankin tahtoisit ymmärtää, miten vähitellen, aste


asteelta, vuosien pitkään, alituisesti antamalla aihetta ja
aiheuttamalla noita häpeällisiä kohtauksia — miehen, aviomiehenkin
sydän myrkyttyy, myrkyttyy, repeilee ja lopuksi paatuu jääkylmäksi.
Läpi koko minun hermostoni on jo mennyt tämä asia, ja sinun äänesi
kuuleminen heikkoina hetkinä — kun lapsia varoittelet — vaikuttaa
pahasti. Enkä minä jaksa ajatella mitään muuta. Tunnen
voimakkaasti minkä tunnen. Ja sinun pitäisi tietää miten
minunkaltaiseni mies tuntee: hän näkee kaiken perspektiivissä
taakse ja eteen. Hänelle syntyy tuhat kuvaa ja viriää tuhat muistoa
tai johtopäätöstä yhdestä kipinästä, yhdestä asiasta, sattumasta tai
tapahtumain yhteydestä. Minulla on muistossa raatelevia totuuksia
rakkaan vainajan ajalta, jotka sinulta ovat unohtuneet ja saavatkin
unohtua… Voi vaimoni, miksi sinä et viisastunut hänen
kuolemastaan? Ettei vaan taas…! Olihan hetkiä, jolloin sinussa näkyi
syvä, uskonnollinen itsetunto. Mutta sinä annoit entisen ohjelman
vaikuttaa ja maailman voittaa. Sinä lankesit vielä Pahemmin, tahdoit
taaskin jollekkin — Jumalalle — ostaa. Aina vain jollekkin kostaa. Se
on sinun temperamenttisi. Kostamisperiaatteella sinä koetat tämän
elämän läpi kulkea ja vaadit elämältä palkintoa — koston jälkeen!

Oi! minä pelkään sinua. Sinä itse olet saanut miehesi sinua
pelkäämään. Tuhannet taistelut, tuhannet sopimukset, tunnustukset,
katumiset, neuvot, alistumiset ja tuhannet ikävät päivät, yöt ja
helvetintunteet — eivät ole mitään opettaneet. Sinä et ole
tahtonutkaan olla varovainen. Ja tämä johtuu sinun ikuisesta
itsekkäisyydestäsi, vastustushalustasi, kiusanteon halustasi,
parantumattomasta kostonhimostasi.

Sinä olet niitä, joka et tiedä kuilujen vaarallisuutta. Yksi askel vielä
ja luonnon lain välttämättömyydellä ihminen syöksyy syvyyteen ja on
kadotettu itseltään ja muilta. Sinä tanssit mieletöntä tanssia kuilun
reunalla!

Jos sinä enemmän rakastaisit lapsiasi — vaikka et miestäsi teoilla


rakasta — niin sinä tekisit kaikissa asioissa toisella tavalla. Sinä
säästäisit heille elämän. Mutta sinä et huoli laskea eteenpäin, sinä
elät vain hetkien oikuissa.

Ja näin on minulta mennyt luottamus. Mistä, asiasta me poloiset


enää voimme todenteolla ja pyhästi sopia? Mistä voimme enää
haaveilla, iloita, uneksia?

Kaikki asiat talonrakennukset, raha-asiat, lasten kohtalo — kaikki


kärsivät tästä meidän välisestä hirveästä sydänten erosta. Me
olemme jo kauvan olleet erotetut. Joskus on luultu oltavan lähellä
toisiaan — muutaman minuutin kuluttua onkin selvennyt että kaunis
näky on ollutkin vain valheellinen kangastus.

Näin on ollut alusta asti. Lapset, suloisemmat, joiden piti yhdistää


kaksi vastakkaista luonnetta, ovatkin joutuneet — ne viattomat
rakkaat — välikappaleiksi eroon.

Ei mikään enää ole pyhää. Ei pyhin kärsimyskään, ei pyhin surun


aarrekkaan…

Vaimoani ei kiinnitä mikään pyhä asia, mikä miestänsä kiinnittää.


Ja mies paatuu, tulee kylmäksi. Hän on jo päässyt yli sen asteen,
jolloin mies vaatii vaimoltaan ainoastaan ruumiillista kauneutta ja
miellyttäväisyyttä, mutta kun sisäinen kuva tummenee, kun sekin
rumenee, missä ovat silloin yhdyssiteet?

— Lapsissa.

Meillä ei ole mitään muuta yhteistä kuin lapset.

Minä en kestä! huudahtaa aviomies jatkaen tutkimustaan.

Minä suren siinä määrin oman kotini, oman avioelämäni


rauhattomuutta, oman ihanteeni särkymistä naisen suhteen, naisen,
joka olisi voinut olla elämän sulostuttaja, mutta joka ei tahtonut, ei
älynnyt niitä hienoja vaikuttimia — että tahdon päästä häpeästä.

Tuliset hiilet, nämä hirveät ristiriidat, luonnollisesti johtavat miehen


raivoamaan…

Sinä et kuule kellojen, hätäkellojen soittoa…


Sinä olet kuuro…

Minä tunsin itsessäni suurta, salattua voimaa. Tahdoin sen antaa


isänmaalle, kansalle, ihmiskunnalle, vieläpä sinulle ja koko
perheelleni. Sinä tulit väliin — sinä häiritsit, sinä sekoitit ajatukseni,
kulutit — kulutat miestäsi — tosin pienillä asioilla, mutta kylliksi
runsailla, jotta ne vähitellen murtavat voimani.

Ja se, sekin tekee katkeraksi. Lisäksi sinun vuosia jatkuvat


suhteesi, antipatiasi talossa oleskelevia kohtaan.

Minun ystäväni pitäisi olla sinun ystäväsi, minun vihamieheni


pitäisi olla sinun — en tarkoita kirjaimellisesti — mutta sinä revit
tässäkin.

Kun kaiken, kaiken panee yhtenä päivänä vaakalaudalle, kaiken


kauhean, jo kestetyn kokemuksen, niin hämmästyy…

Ei paremmatkaan vetäjät kestä, jos kuormaa tunnottomasti


lisätään. Minä en koskaan pese käsiäni synneistäni, mutta en myös
koskaan tunnusta itseäni pahemmaksi kuin olen.

Nainen, onko sinulla vielä mitään tekemistä perheessä?


Yhdennellätoista hetkelläsi ja minun yhdennellätoista hetkellä?

Säilytä tämä surkea kirje — todistuksena, joka tarvitaan.

En enää voi vaijeta, sentähden kirjoitan. Minä rakastan lapsia ja


totuutta.

Enkä enää mitään pyydä, vaan suorastaan — varoitan.

Hän sulki tämän kirjeen kuoreen ja kirjoitti päälle:


Vaimolleni — Itselleni — Jumalani edessä!

Ja kuoren alareunaan hän lisäsi: Ystävilleni kovan kohtalon varalta


psykologian ymmärtämiseksi.

Jätti kirjeen pöydälleen, pukeutui hiljaa, otti suksensa ja painui


metsän hämärään.

Hän ei tiennyt minne mennä, mutta jonnekkin oli mentävä — — —

*****

Lumipuhdas luonto? Vienosti syttyväiset iltatähdet! Hauskasti


liukuvat sukset ja raikas talvinen sää, ympärillä juhlallinen avaruus!

Eivätkö ne kaikki olleet Jumalan suuruuden, Jumalan laupeuden ja


Jumalan käsittämättömyyden todistuksia?

Kuinka mitätön, pieni, halpa oli ihminen kiiluvan tähtitaivaan alla!

Miksi hän teki itsensä onnettomammaksi kuin ehkä olikaan?

*****

Aviomies ajatteli:

Yritin rikoksen tielle. Saatanhan kääntyä takaisin. Vielä ei ole


myöhäistä! Vielä ei ole mitään sellaista tehty, mikä ei paraneisi. Ja
tästä kaikesta ei tarvitse kenenkään tietää. Se on — meidän
kahdenkeskisiä salaisuuksia.

Kaikki minun puoleltani on enemmän tai vähemmän —


näyttelemistä. Tehtyä ankaruutta! Ja kenties on koko Mirjamin
käytöskin näyttelemistä vain. Tai ainakin ohimenevää. Hyvä Jumala
— hänhän on viimeisillään.

Heittäkäämme naamarit pois, niin olemme taas luonnollisia


ihmisiä!

*****

Ja kovan myrskyn jälkeen tuli jälleen tyven. Ihana, jumalainen,


hiljainen, pohjolan lämmin tyven, jossa orjanruusut punoittavat
rannoilla…

24.

Tammikuun pakkasyönä kiitää kiireellinen matkue pitkin lumista


valtatietä. Edellä ajaa mies porolla, jäljessä juoksee hevonen
rekineen, jossa paitsi kyytimiestä istuu kaksi naista. Tiuvut, kulkuset
ja aisakello helisevät, poron kaviot naksuvat ja hevosreen jalakset
narisevat — yksikään ihmisistä ei puhu mitään.

Ensimäisessä kievarissa vaihdetaan kiireesti hevosia ja matkue


vierii äänettömänä eteenpäin yli korkeiden vaarojen ja läpi ulapoiden
rämeiden.

"Miten käy? miten käy? Kerkeämmekö vai tapahtuuko


onnettomuus?"

Matkaa on viisi penikulmaa.


Toisessa kievarissa valtaa matkustajat raukea väsymys ja he
nukahtavat vaatepäällä yhdeksi tunniksi. Sitten taas jatketaan
matkaa pimeässä talviyössä yli mäkien, poikki loppumattomien
rämekorpien.

Poromies edellä ajattelee: miten käynee jälessätulevan? Hyvä


Jumala, mikä tulisikaan, jos se tapahtuisi keskellä taivalta, reessä…?

Hän muistaa että on kerran ennenkin saattanut synnytystuskassa


olevaa vaimoaan. Silloinkin oli jännitys suuri, mutta kaikki kävi hyvin.
Vaan se olikin pääkaupungissa — nyt ollaan synkässä korvessa, jossa
ei ole kätilöitä joka kylässä eikä lääkäriä joka pitäjässä.

Tie suikertelee metsässä, painautuu notkoihin, nousee kunnaille,


laskeutuu taas metsäjärvien jäille, joilla käy hyytävä viima.
Poromiehen parta on valkeana kuurasta. Kaakon taivaalla siintää
heikko aamurusko luoden kalpean kajastuksen yli alakuloisten
rämemaisemain. Ei risahdusta missään, kitukasvuiset kelohongat
soilla ojentelevat kuin vilussa väristen paljaita käsivarsiaan. Masea
mieli valtaa ajajan, mutta hän koettaa sen karkoittaa pois,
arvostellen sen yön valvomisesta johtuvaksi sielun autiudeksi.

Vähät minusta — mutta hän? Hän pysäyttää poronsa, pidättää


hengitystään ja kuuntelee. Minne jäikään hevoskyyti? Ei kuulu
aisakelloa. Ettei vaan…?

Pakkanen kovenee, keli sitkastuu, taivaan ranta kelmenee


kelmenemistään ja yön haamotus häipyy.

"Voi tätä viheliäistä erämaata! Voi näitä loppumattomia taipaleita!


Että ovatkin ihmiset tänne raivanneet itselleen tyyssijansa — tänne
kylmään avaruuteen, jossa on vain ikuinen taistelu hallaa vastaan."
Jo kuuluu aisakellon kalkatus kaukaa takaapäin — "sieltä hän
tulee, hän, minun elämäni toveri erämaassa. Hän, jonka minä…"

Ja porolla-ajaja heittäytyy pulkkaansa ja läiskäyttää lämsäänsä.

Tullaan kolmanteen kievariin, päivä juuri valkenee, yli lumisten


peltojen, jonka keskessä harmaa talo nukkuu…

— Mirjam, miltä nyt tuntuu?

— Nyt on hyvä, ei tunnu miltään. Matkustajat tulevat iloiselle


mielelle, kun pääsevät pakkasesta lämpimään huoneeseen. Isäntä ja
emäntä ovat niin harvinaisen ystävällisiä ihmisiä, eivät mitenkään
lupaa lähteä ilman aamiaista ja kahvia.

— Mihinkä sitä nyt reissutaan? Ja läpi öiseen?

— Tämä minun eukkoni vain vähän tuulottelee, sille tuli niin ikävä
Syrjäkorvessa!

Aviomies ihmettelee itseänsä että uskaltaa jo leikkiä laskea, kun


vaara näyttää olevan ohitse.

Ja vaimo myös iskee iloisesti silmää ja nauraa. Eilisiltaiset kauheat


väänteet ovat unohtuneet ja ruokahalu on mainio.

— Mirjam, minä saatan sinua kaikissa tapauksissa perille asti.

Ja he lähtevät taas taipaleelle. — Perille saavuttua on Mirjam


kummissaan ettei hänen asiallaan näytä olevan mitään kiirettä. Ihan
hävettää! Ja sellaista hiidenhamppua kun pidettiin ja koluttiin läpi
öiseen…

Hän eroaa illan tullen Orjosta, miehestään, reippain mielin:


— Ei minulla ole mitään hätää. Täällä on hyvä olla. Ja asia tietysti
käy hyvin.

— Ole nyt kaikissa tapauksissa varovainen, ja hoida itseäsi, sanoo


aviomies.

— Kirjoitathan Orjo taas kirjeitä?

— Sitä tuskin tarvitsee sanoa. Rakas ystävä, voi nyt oikein hyvin.

Hihna huiskahtaa ja poromies katoaa pimeään yöhön. Elämä on


reippautta.

25.

28 p. tammikuuta.

Rakas Mirjam!

Taas paistaa aurinko ja taas kirjoitan sinulle. Tänä aamuna kello 6


nousin ylös pikku Mailan vierestä, valjastin poroni ja kyyditsin
postineidin pakkasessa postiin. Ja ajatteles mitä tapahtui:
Mykrämäen alla, kun nykäsin, jäi hihna käteeni — poro oli yön
aikana purrut sen niin ohueksi että se katkesi. Emme uskaltaneet
porolle ilmaista sen irtioloa, vaan annoimme sen itsestään mennä ja
se menikin totuttuun paikkaansa.

Minä olin nyt vihdoinkin varma siitä että saan, viestin sinusta tai
sinulta. Mutta kun postilaukut aukaistiin — ei hiiskausta? Ja minä
kun luulin että kohtalo sallii sinun synnyttää lapsemme 26 päivä
tammikuuta — sinä ymmärrät minut! Miten siis lienee — missä
ihmeessä se viipyy? Tämähän on hullunkurista: koko Syrjäkorpi ja
Suopunki, vieläpä koko Kieringin kihlakunta vartoo päivästä toiseen
että "milloin Orjo Koreliuksen uusin teos ilmestyy maailmaan?" Ne
eivät ymmärrä että äidin kohdussakin saattaa vallita "lakko." Mutta
Jumala ehkä suopi sen pienen pakkastiaisen tulla tähän maailmaan
sitä valmiimpana.

No, niinhän näyttivätkin viimeiset tilimme että pahimmassa


tapauksessa lapsi syntyy vasta tammikuun ja helmikuun vaiheilla. Ne
ovat oikullista herrasväkeä ne meidän lapset: ne suvaitsevat tulla
joskus kahta viikkoa aikaisemmin (jos lamppu savustaa!) tai kahta
viikkoa myöhemmin (kun eivät toiset lapset kiiruhda).

Maanantai-aamuna tietysti taas vahdin viestiä, kukasties ajan


pyhäiltana ensimäiseen kievariin: eikö postimies mitäkuta olisi
urkkinut. Käskeppä nyt siis heti jonkun pistää pienikään raportti
yksityisesti Syrjäkorven postimiehelle, niin en tyhjään aja yöllä
kievariin tähtien valossa. Vaikka ei asia olisi valmiskaan, ilmoituta
sekin.

Ihmeen suloiset ovat pikku tyttimme, molemmat. Jospa ne itse


voisivat muistaa kaikki seikat sitten kun isoiksi tulevat, jos nimittäin
kaitselmus suo niiden jäädä eloon. Meidän täytyy olla valmiit ne
myös kadottamaan. Kun kerran kalleimpamme olemme kadottaneet,
emme saa ajatella niin ylpeästi.

Ja kuitenkin toivon koko sielustani että ne saisivat jäädä eloon.


Varmasti niissä nyt ovat elonmerkit. Maila oli sinun lähdettyäsi
jollakin tavoin kipeä, mutta nyt on tytti entistä terveempi, ei huuda
eikä juonittele, syöpi hyvin, nauttii kaikesta, räiskyttää ympärilleen
elämänilon kultaa ja kehittyy puheissaan hämmästyttävästi. Tyttöä
on käytetty saunassa ja nykyään on se häneen tepsinyt hyvin. Sekä
Mailaa että Sirkkaa käytetään joka päivä ulkona tuulottelemassa ja
luulenpa että tämä murun komennukseni tekee hyvää Agnes siskosi
huonoille keuhkoille. Terveellinen pikku pakko ei ole "alentavainen
sisarellesi", kuten "rouva Korelius" joskus on suvainnut ajatella.

Se tässä nykyisessä elämässä on parasta että kun ei mitään


hermokohtausten rähäkkää koskaan ilmene, lapsetkin ovat aivan
kuin muuttuneet. Se on ihan ihmeellistä! Minuun he nyt tietysti
enemmän turvautuvat ja panenhan useinkin aikaa heidän
kantelemiseensa olkapäilläni. Tätiään he kunnioittavat.

Esimerkkinä Mailan kehityksestä saatan mainita, kuinka hän


tänään juoksi kamariini nukke sylissään ja käski minun "sanoa paljon
kiitoksia Maijalle!" Kysäsin: "mistä hyvästä minun piti häntä kiittää?
Tai mitä hän siis on tehnyt?" Ja Maila vastasi totisena: "Se on tehnyt
isot asiat housuun!" Tietysti minä silloin otin nukkea kädestä ja
sanoin: "paljon kiitoksia!" ja Maila juoksi riemastuksissaan saliin —
hän oli voittanut tarkoituksensa. Sitten hän tuli sanomaan: "Loviisa
on hämmästynyt!"

— Mistä niin? utelin minä.

— Kelkasta! vastasi tyttö. Kun selitin että ihminen hämmästyy


tavallisesti silloin, kun jotakin yhtäkkiä tapahtuu, niin katsoi hän
veitikkamaisesti silmiin ja sanoi: niinkö? Ihminenkö? Hämmästyykö?
mutta väitti yhä että olipa Loviisakin aikalailla tänä aamuna
hämmästynyt. Sitten hän kävi huokaisemassa: "Minulla pitäisi olla
paljon työtä!"

— Kyllä sinulle, lapsi kulta, tulee paljon työtä, kunhan kasvat


isoksi! arvelin minä isänä.
"Voi!" sanoi hän kirkkain silmin. Ja meni huutamaan tädilleen että
hänellekkin tulee kerran paljon työtä!

— Loviisallekkin tulee paljon työtä!

— Ei! sanoin minä. — Loviisa jääpi nukeksi, vaan sinä kasvat


ihmiseksi.

Hän mietti, mutta hyväksyi mielipiteeni.

— Eikö äiti kirjoittanutkaan? hän kysyi tänä aamuna, mutta vastasi


itse heti perään: Ei äiti jaksa kirjoittaa!

Kerran minä ilmoitin että äidille tulee pikku lapsi.

— Mistä se tulee? kysyi Maila uteliaasti. Luuletko että minä


vastasin vanhan tavan mukaan että äiti muka löytää lapsen saunan
lattian alta t.m.s. Ei, vaan minä ainoastaan painostin että äidille tulee
ja vain sentähden ettei Maila ymmärrä, jätin sanomatta että äiti itse
tekee lapsen isälle (kuten kansa sanoo). Mirjam! Sinun ei tarvitse
luulla etten minä kiitollisuudella vastaanottaisi — kolmattakin tyttöä.
Tietysti poika olisi henkisiä haaveitani likempänä, mutta eihän noita
tyttöjäkään joka mies saa ja sentähden ne, varsinkin pieninä, ovat
sokeria suolan päälle. Kyllä lastensaanti on jotakin erinomaista, sano
sinä mitä tahansa.

Lapsissahan me uudestaan elämme oman itsemme. Jospa sen


muistaisimme silloin kun väsymme oman heikkoutemme takia.

Oi, elämän murhetta emme saa päästää myrkyttämään lyhyttä


vaellustamme maan päällä!
Ilo, ei kevytmielisyys, vaan siveellisiin saavutuksiin perustuva ilo,
on parempi kuin tuo ikuinen mököttäminen ja kaikkeen
kyllästyminen.

Mutta se riippuu eräästä salaisuudesta — terveydenhoidosta.

Jos sinäkin…? niin et… Te sisarukset olette mököttäjäsukua,


jonkunlaisia märehtijöitä, pieninisäisiä nisäkkäitä, jotka vaativat että
ihmisen terveyden pitää kestää alituisessa huone-ilmassa. Minäpä
sanon: jollei teistä jokainen ala uhrata, omaa järkensä käskystä,
aikaa luonnollisiin virkistyksiin, niin te, jokainen varpunen, kuolette
harmajan kuoleman harmaan räystään alle. Syrjäinen sen parhaiten
tietää.

Sinun täytyy vahvistua. Sinun täytyy päästää ärtyisistä


hermosäikeistäsi ja kohottaa Koreliuksenkin uusi sukupolvi! Se on
sinun kunnia-asiasi. Nyt et sitä jaksane ajatella, lue tämä siis sitten
kun jaksat.

Oh, kuinka paljon minullakin olisi sisätyötä, vaan kuinka rakkaalta


tuntuu ajella peuralla kimmeltäviä lumia. Virkisty!

Orjo.

Suopunki, 29 p. tammikuuta.

Rakas Mieheni!

Poika!!!

Syntyi meille 27 päivä, perjantai-iltana klo 11.45. Olemme


molemmat terveet. Painoi yli 3 kg. Kovempia polttoja kesti tunnin —
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookluna.com

You might also like