-
Скрипты вставляются на страницу как текст в теге
js <script>, либо как внешний файл черезjs <script src="путь"></script> -
Специальные атрибуты
asyncиdeferиспользуются для того, чтобы пока грузится внешний скрипт – браузер показал остальную (следующую за ним) часть страницы. Без них этого не происходит. -
Разница между
asyncиdefer: атрибутdeferсохраняет относительную последовательность скриптов, аasync– нет. Кроме того,deferвсегда ждёт, пока весь HTML-документ будет готов, аasync– нет. -
Скрипты, которые вызовоются с скрипта по умолчанию
async
Директива use strict
'use strict';Если написать эту директиву только в функции, строгий режим будет использоваться только там.
Браузер IE8 поддерживает только совсем старую версию стандарта JavaScript, а именно ES3.
К счастью, многие возможности современного стандарта можно добавить в этот браузер, подключив библиотеку ES5 shim, а именно – скрипты es5-shim.js и es5-sham.js из неё.
var COLOR_RED = "#F00"; // Константы. По сути они не константы, их можно менять
var COLOR_GREEN = "#0F0";
var COLOR_BLUE = "#00F";
var COLOR_ORANGE = "#FF7F00";
var color = COLOR_ORANGE; // Переменная
alert( color ); // #FF7F00Примитивные
number(Infinity, NaN)stringboolean
var checked = true;
checked = false;- Спец. значение
null- Это тоже тип, который не относится к другим. - Спец. значение
undefined- Это тоже тип какnull.
var x;
console.log(x); // Значение не присвоено, но переменная объявленаObject type
var user = { name: "Вася" };Оператор typeof
Работают они одинаково, но первый синтаксис короче.
- Синтаксис оператора: typeof x.
- Синтаксис функции: typeof(x).
var apples = "2";
var oranges = "3";
alert( apples + oranges ); // "23", так как бинарный плюс складывает строки
alert( +apples + +oranges ); // 5, число, оба операнда предварительно преобразованы в числа**
Запятая позволяет перечислять выражения, разделяя их запятой ','. Каждое из них – вычисляется и отбрасывается, за исключением последнего, которое возвращается.
var a = (5, 6);
alert( a ); // 6// три операции в одной строке
for (a = 1, b = 3, c = a*b; a < 10; a++) {
...
}>= > < <= - сравнения, == != - равенство. (Сравнение проводить к числу, а равенство нет)
Для проверки равенства без преобразования типов используются операторы строгого равенства === (тройное равно) и !==.
- Значения
nullиundefinedравны == друг другу и не равны чему бы то ни было ещё. Это жёсткое правило буквально прописано в спецификации языка. - При преобразовании в число
nullстановится0, аundefinedстановитсяNaN.
Результат:
alert(null > 0); // false
alert(null == 0); // false
alert(null >= 0); // true, приводится к числу (null->0, undefined->NaN). Смысл вышеЗначение undefined вообще нельзя сравнивать:
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)- Сравнения
(1)и(2)даютfalseпотому, чтоundefinedпри преобразовании к числу даётNaN. А значениеNaNпо стандарту устроено так, что сравнения==, <, >, <=, >=и даже===с ним возвращают false. - Проверка равенства
(3)даётfalse, потому что в стандарте явно прописано, чтоundefinedравно лишьnullили себе и ничему другому
var a, b = NaN, c = null;
console.log(a == b); // false
console.log(a === b); // false
console.log(a == c); // true
console.log(a === c); // falsegoogle))
alert(~~12.345); // 12
alert( 12.345 ^ 0) // 12
alert(alert(12.3 * 14.5 ^ 0); // (=178) "12.3 умножить на 14.5 и округлить")
alert( 1.1 + 1.2 ^ 0 ); // 2, сложение выполнится раньше округленияvar n = 5;
if (~n) { // сработает, т.к. ~n = -(5+1) = -6
alert( "n не -1" ); // выведет!
}
var str = "Проверка";
if (~str.indexOf("верка")) { // Сочетание "if (~...indexOf)" читается как "если найдено"
alert( 'найдено!' );
}Safari 5.1+ не возращает null
var years = prompt('Сколько вам лет?', 100);
alert('Вам ' + years + ' лет!')var isAdmin = confirm("Вы - администратор?"); // true - OK; false - cancel
alert( isAdmin );- undefined - NaN
- null - 0
- true/false - 1/0
- Строка - Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то 0, иначе из непустой строки "считывается" число, при ошибке результат NaN.
- undefined, null - 0
- numbers - all true, except 0, NaN
- string - all true, except ""
- Object - all true
Вызов break outer ищет ближайший внешний цикл с такой меткой и переходит в его конец.
outer:
for (var i = 0; i < 3; i++) { ... }var f = function sayHi(name) {
alert( sayHi ); // изнутри функции - видно (выведет код функции)
};
alert( sayHi ); // снаружи - не видно (ошибка: undefined variable 'sayHi')var test = function sayHi(name) {
sayHi = "тест"; // попытка перезаписи (use strict выдает ошибка)
alert( sayHi ); // function... (перезапись не удалась)
};
test();// Named Function Expression!
(function g() { return 1; });
alert(g); // Ошибка!