This translation is incomplete. Please help translate this article from English.
يناقش هذا الفصل جافا سكريبت القواعد الأساسية والإعلانات المتغيرة، وأنواع البيانات والحرفية.
الأساسيات
إستعارت الجافاسكريبت معظم قواعدها من الجافا، ولكنها أيضا تأثرت بكل من Awk، بيرل و بيثون.
الجافاسكريبت حساسة لحالة الأحرف كما أنها تستخدم مجموعة أحرف Unicode.
في الجافاسكريبت، التعليمات تسمى statements وتكون مفصولة بفاصلة منقوطة (؛). الفراغات، علامات التبويب والأسطر الجديدة تسمى مساحة خالية. يتم تحليل نص شفرة المصدر جافا سكريبت من اليسار إلى اليمين ويتم تحويلها إلى سلسلة من العناصر والمدخلات التي هي الرموز، أحرف التحكم، الغلق خط أو تعليقات أو بيضاء. تعرف ECMAScript أيضا بعض الكلمات الرئيسية والحرفية ولها قواعد الإدراج التلقائي للالمنقوطة (ASI) لانهاء البيانات. ومع ذلك، فمن المستحسن أن تضيف دائما الفاصلة المنقوطة لانهاء البيانات الخاصة بك. ذلك تجنب الآثار الجانبية. لمزيد من المعلومات، انظر المرجع مفصلة عن قواعد اللغة قاموس جافا سكريبت.
التعليقات
صيغة التعليقات هي نفسها كما هو الحال في C ++ و في العديد من اللغات الأخرى:
// تعليق في سطر واحد /* this is a longer, multi-line comment */ /* You can't, however, /* nest comments */ SyntaxError */
التصريحات
هناك ثلاثة أنواع من التصريحات في الجافا سكريبت.
var
- التصريح عن متغير، وإختياريا تهيئته بقيمة ما.
-
let
- يعلن نطاق كتلة متغير محلي، تهيئة اختياريا إلى قيمة.
-
const
- التصريح عن ثابت قابل للقراءة فقط.
المتغيرات
تستخدم المتغيرات كأسماء رمزية للقيم في برنامجك. أسماء المتغيرات، تسمى identifiers, وتخضع لقواعد معينة.
المعرف في الجافاسكريبت يجب أن يبدأ بحرف، أو رمز (_)، أو علامة الدولار ($). يمكن أيضا أن تكون الأحرف اللاحقة أرقاما (0-9). ولأن الجافاسكريبت حساسة لحالة الأحرف، فإن الحروف تشمل الأحرف "A" حتى "Z" (أحرف كبيرة) وأحرف "a" حتى "z" (أحرف صغيرة).
يمكنك استخدام أحرف ISO 8859-1 أو Unicode مثل å و ü في المعرفات. كما يمكنك أيضا استخدام حروف Unicode escape sequences في معرفات.
بعض الأمثلة على الأسماء الجائزة (Number_hits, temp99, و _name).
التصريح عن المتغيرات
يمكنك تعريف متغير في ثلاث طرق:
- مع الكلمة
var
. على سبيل المثال، يمكن استخدام var x = 42. بناء الجملة هذا التصريح المتغيرات على الصعيدين المحلي والعالمي. - By simply assigning it a value. For example,
x = 42
. This always declares a global variable. It generates a strict JavaScript warning. You shouldn't use this variant. - With the keyword
let
. For example,let y = 13
. This syntax can be used to declare a block scope local variable. See Variable scope below.
Evaluating variables
A variable declared using the var
or let
statement with no initial value specified has the value undefined
.
An attempt to access an undeclared variable will result in a ReferenceError
exception being thrown:
var a; console.log("The value of a is " + a); // logs "The value of a is undefined" console.log("The value of b is " + b); // throws ReferenceError exception
You can use undefined
to determine whether a variable has a value. In the following code, the variable input
is not assigned a value, and the if
statement evaluates to true
.
var input; if(input === undefined){ doThis(); } else { doThat(); }
The undefined
value behaves as false
when used in a boolean context. For example, the following code executes the function myFunction
because the myArray
element is undefined:
var myArray = []; if (!myArray[0]) myFunction();
The undefined
value converts to NaN
when used in numeric context.
var a; a + 2 = NaN
When you evaluate a null
variable, the null value behaves as 0 in numeric contexts and as false in boolean contexts. For example:
var n = null; console.log(n * 32); // Will log 0 to the console
Variable scope
When you declare a variable outside of any function, it is called a global variable, because it is available to any other code in the current document. When you declare a variable within a function, it is called a local variable, because it is available only within that function.
JavaScript before ECMAScript 6 does not have block statement scope; rather, a variable declared within a block is local to the function (or global scope) that the block resides within. For example the following code will log 5
, because the scope of x
is the function (or global context) within which x
is declared, not the block, which in this case is an if
statement.
if (true) { var x = 5; } console.log(x); // 5
This behavior changes, when using the let
declaration introduced in ECMAScript 6.
if (true) { let y = 5; } console.log(y); // ReferenceError: y is not defined
Variable hoisting
Another unusual thing about variables in JavaScript is that you can refer to a variable declared later, without getting an exception. This concept is known as hoisting; variables in JavaScript are in a sense "hoisted" or lifted to the top of the function or statement. However, variables that aren't initialized yet will return a value of undefined
.
/** * Example 1 */ console.log(x === undefined); // logs "true" var x = 3; /** * Example 2 */ // will return a value of undefined var myvar = "my value"; (function() { console.log(myvar); // undefined var myvar = "local value"; })();
The above examples will be interpreted the same as:
/** * Example 1 */ var x; console.log(x === undefined); // logs "true" x = 3; /** * Example 2 */ var myvar = "my value"; (function() { var myvar; console.log(myvar); // undefined myvar = "local value"; })();
Because of hoisting, all var
statements in a function should be placed as near to the top of the function as possible. This best practice increases the clarity of the code.
Global variables
Global variables are in fact properties of the global object. In web pages the global object is window
, so you can set and access global variables using the window.variable
syntax.
Consequently, you can access global variables declared in one window or frame from another window or frame by specifying the window or frame name. For example, if a variable called phoneNumber
is declared in a document, you can refer to this variable from an iframe as parent.phoneNumber
.
Constants
You can create a read-only, named constant with the const
keyword. The syntax of a constant identifier is the same as for a variable identifier: it must start with a letter, underscore or dollar sign and can contain alphabetic, numeric, or underscore characters.
const prefix = '212';
A constant cannot change value through assignment or be re-declared while the script is running. It has to be initialized to a value.
The scope rules for constants are the same as those for let
block scope variables. If the const
keyword is omitted, the identifier is assumed to represent a variable.
You cannot declare a constant with the same name as a function or variable in the same scope. For example:
// THIS WILL CAUSE AN ERROR function f() {}; const f = 5; // THIS WILL CAUSE AN ERROR ALSO function f() { const g = 5; var g; //statements }
Data structures and types
Data types
The latest ECMAScript standard defines seven data types:
- Six data types that are primitives:
- Boolean.
true
andfalse
. - null. A special keyword denoting a null value. Because JavaScript is case-sensitive,
null
is not the same asNull
,NULL
, or any other variant. - undefined. A top-level property whose value is undefined.
- Number.
42
or3.14159
. - String. "Howdy"
- Symbol (new in ECMAScript 6). A data type whose instances are unique and immutable.
- Boolean.
- and Object
Although these data types are a relatively small amount, they enable you to perform useful functions with your applications. Objects
and functions
are the other fundamental elements in the language. You can think of objects as named containers for values, and functions as procedures that your application can perform.
Data type conversion
JavaScript is a dynamically typed language. That means you don't have to specify the data type of a variable when you declare it, and data types are converted automatically as needed during script execution. So, for example, you could define a variable as follows:
var answer = 42;
And later, you could assign the same variable a string value, for example:
answer = "Thanks for all the fish...";
Because JavaScript is dynamically typed, this assignment does not cause an error message.
In expressions involving numeric and string values with the + operator, JavaScript converts numeric values to strings. For example, consider the following statements:
x = "The answer is " + 42 // "The answer is 42" y = 42 + " is the answer" // "42 is the answer"
In statements involving other operators, JavaScript does not convert numeric values to strings. For example:
"37" - 7 // 30 "37" + 7 // "377"
Converting strings to numbers
In the case that a value representing a number is in memory as a string, there are methods for conversion.
parseInt
will only return whole numbers, so its use is diminished for decimals. Additionally, a best practice for parseInt
is to always include the radix parameter. The radix parameter is used to specify which numerical system is to be used.
An alternative method of retrieving a number from a string is with the +
(unary plus) operator:
"1.1" + "1.1" = "1.11.1" (+"1.1") + (+"1.1") = 2.2 // Note: the parentheses are added for clarity, not required.
Literals
You use literals to represent values in JavaScript. These are fixed values, not variables, that you literally provide in your script. This section describes the following types of literals:
Array literals
An array literal is a list of zero or more expressions, each of which represents an array element, enclosed in square brackets ([]
). When you create an array using an array literal, it is initialized with the specified values as its elements, and its length is set to the number of arguments specified.
The following example creates the coffees
array with three elements and a length of three:
var coffees = ["French Roast", "Colombian", "Kona"];
Note: An array literal is a type of object initializer. See Using Object Initializers.
If an array is created using a literal in a top-level script, JavaScript interprets the array each time it evaluates the expression containing the array literal. In addition, a literal used in a function is created each time the function is called.
Array literals are also Array
objects. See Array
and Indexed collections for details on Array
objects.
Extra commas in array literals
You do not have to specify all elements in an array literal. If you put two commas in a row, the array is created with undefined
for the unspecified elements. The following example creates the fish
array:
var fish = ["Lion", , "Angel"];
This array has two elements with values and one empty element (fish[0]
is "Lion", fish[1]
is undefined
, and fish[2]
is "Angel").
If you include a trailing comma at the end of the list of elements, the comma is ignored. In the following example, the length of the array is three. There is no myList[3]
. All other commas in the list indicate a new element. (Note: trailing commas can create errors in older browser versions and it is a best practice to remove them.)
var myList = ['home', , 'school', ];
In the following example, the length of the array is four, and myList[0]
and myList[2]
are missing.
var myList = [ , 'home', , 'school'];
In the following example, the length of the array is four, and myList[1]
and myList[3]
are missing. Only the last comma is ignored.
var myList = ['home', , 'school', , ];
Understanding the behavior of extra commas is important to understanding JavaScript as a language, however when writing your own code: explicitly declaring the missing elements as undefined
will increase your code's clarity and maintainability.
Boolean literals
The Boolean type has two literal values: true
and false
.
Do not confuse the primitive Boolean values true
and false
with the true and false values of the Boolean object. The Boolean object is a wrapper around the primitive Boolean data type. See Boolean
for more information.
Integers
Integers can be expressed in decimal (base 10), hexadecimal (base 16), octal (base 8) and binary (base 2).
- Decimal integer literal consists of a sequence of digits without a leading 0 (zero).
- Leading 0 (zero) on an integer literal indicates it is in octal. Octal integers can include only the digits 0-7.
- Leading 0x (or 0X) indicates hexadecimal. Hexadecimal integers can include digits (0-9) and the letters a-f and A-F.
Some examples of integer literals are:
0, 117 and -345 (decimal, base 10) 015, 0001 and -077 (octal, base 8) 0x1123, 0x00111 and -0xF1A7 (hexadecimal, "hex" or base 16)
For more information, see Numeric literals in the Lexical grammar reference.
Floating-point literals
A floating-point literal can have the following parts:
- A decimal integer which can be signed (preceded by "+" or "-"),
- A decimal point ("."),
- A fraction (another decimal number),
- An exponent.
The exponent part is an "e" or "E" followed by an integer, which can be signed (preceded by "+" or "-"). A floating-point literal must have at least one digit and either a decimal point or "e" (or "E").
Some examples of floating-point literals are 3.1415, -3.1E12, .1e12, and 2E-12.
More succinctly, the syntax is:
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
For example:
3.14 2345.789 .3333333333333333333 -.283185307179586
Object literals
An object literal is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}
). You should not use an object literal at the beginning of a statement. This will lead to an error or not behave as you expect, because the { will be interpreted as the beginning of a block.
The following is an example of an object literal. The first element of the car
object defines a property, myCar
, and assigns to it a new string, "Saturn
"; the second element, the getCar
property, is immediately assigned the result of invoking the function (CarTypes("Honda"));
the third element, the special
property, uses an existing variable (Sales
).
var Sales = "Toyota"; function CarTypes(name) { if (name == "Honda") { return name; } else { return "Sorry, we don't sell " + name + "."; } } var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales }; console.log(car.myCar); // Saturn console.log(car.getCar); // Honda console.log(car.special); // Toyota
Additionally, you can use a numeric or string literal for the name of a property or nest an object inside another. The following example uses these options.
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; console.log(car.manyCars.b); // Jeep console.log(car[7]); // Mazda
Object property names can be any string, including the empty string. If the property name would not be a valid JavaScript identifier, it must be enclosed in quotes. Property names that would not be valid identifiers also cannot be accessed as a dot (.
) property, but can be accessed and set with the array-like notation("[]
").
var unusualPropertyNames = { "": "An empty string", "!": "Bang!" } console.log(unusualPropertyNames.""); // SyntaxError: Unexpected string console.log(unusualPropertyNames[""]); // An empty string console.log(unusualPropertyNames.!); // SyntaxError: Unexpected token ! console.log(unusualPropertyNames["!"]); // Bang!
Please note:
var foo = {a: "alpha", 2: "two"}; console.log(foo.a); // alpha console.log(foo[2]); // two //console.log(foo.2); // Error: missing ) after argument list //console.log(foo[a]); // Error: a is not defined console.log(foo["a"]); // alpha console.log(foo["2"]); // two
String literals
A string literal is zero or more characters enclosed in double ("
) or single ('
) quotation marks. A string must be delimited by quotation marks of the same type; that is, either both single quotation marks or both double quotation marks. The following are examples of string literals:
"foo"
'bar'
"1234"
"one line \n another line"
"John's cat"
You can call any of the methods of the String object on a string literal value—JavaScript automatically converts the string literal to a temporary String object, calls the method, then discards the temporary String object. You can also use the String.length
property with a string literal:
console.log("John's cat".length) // Will print the number of symbols in the string including whitespace. // In this case, 10.
You should use string literals unless you specifically need to use a String object. See String
for details on String
objects.
Using special characters in strings
In addition to ordinary characters, you can also include special characters in strings, as shown in the following example.
"one line \n another line"
The following table lists the special characters that you can use in JavaScript strings.
Character | Meaning |
---|---|
\0 |
Null Byte |
\b |
Backspace |
\f |
Form feed |
\n |
New line |
\r |
Carriage return |
\t |
Tab |
\v |
Vertical tab |
\' |
Apostrophe or single quote |
\" |
Double quote |
\\ |
Backslash character |
\XXX |
The character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, \251 is the octal sequence for the copyright symbol. |
\xXX |
The character with the Latin-1 encoding specified by the two hexadecimal digits XX between 00 and FF. For example, \xA9 is the hexadecimal sequence for the copyright symbol. |
\uXXXX |
The Unicode character specified by the four hexadecimal digits XXXX. For example, \u00A9 is the Unicode sequence for the copyright symbol. See Unicode escape sequences. |
Escaping characters
For characters not listed in Table 2.1, a preceding backslash is ignored, but this usage is deprecated and should be avoided.
You can insert a quotation mark inside a string by preceding it with a backslash. This is known as escaping the quotation mark. For example:
var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service."; console.log(quote);
The result of this would be:
He read "The Cremation of Sam McGee" by R.W. Service.
To include a literal backslash inside a string, you must escape the backslash character. For example, to assign the file path c:\temp
to a string, use the following:
var home = "c:\\temp";
You can also escape line breaks by preceding them with backslash. The backslash and line break are both removed from the value of the string.
var str = "this string \ is broken \ across multiple\ lines." console.log(str); // this string is broken across multiplelines.
Although JavaScript does not have "heredoc" syntax, you can get close by adding a linebreak escape and an escaped linebreak at the end of each line:
var poem = "Roses are red,\n\ Violets are blue.\n\ I'm schizophrenic,\n\ And so am I."
More information
This chapter focuses on basic syntax for declarations and types. To learn more about JavaScript's language constructs, see also the following chapters in this guide:
In the next chapter, we will have a look at control flow constructs and error handling.