door Ruslan Nurgaleev 3 jaren geleden
589
Meer zoals dit
let x = 1;
x = -x;
alert( x ); // -1, применили унарный минус
Чтобы преобразовать строку в число, достаточно поставить перед ним +
let apples = "2";
let oranges = "3";
// оба операнда предварительно преобразованы в числа
alert( +apples + +oranges ); // 5
// более длинный вариант
// alert( Number(apples) + Number(oranges) ); // 5
Если - или /, то стринг всегда будет преобразован в число
alert( 6 - '2' ); // 4, '2' приводится к числу
alert( '6' / '2' ); // 3, оба операнда приводятся к числам
let value = true;
alert(typeof value); // boolean
value = String(value); // теперь value это строка "true"
alert(typeof value); // string
___________________
let str = "123";
alert(typeof str); // string
let num = Number(str); // становится числом 123
alert(typeof num); // number
Преобразование строки в булиан "0" это true. Пробел это тоже true. Если в строчке ничего, то false
Если строка не может быть явно приведена к другому типу, то получаем NaN
2. Мы не можем изменить внешний вид
1. Расположение окна определяется браузером
окно с вопросом и ответами ОК и Отмена
let isBoss = confirm("Ты здесь главный?");
alert( isBoss ); // true, если нажата OK
result = confirm(question);
принимает 2 аргумента: result = prompt(title, [default]);
let age = prompt('Сколько тебе лет?', 100);
alert(`Тебе ${age} лет!`); // Тебе 100 лет!
Введенный пользователем текст будет присвоен переменной result
[] - означает, что параметр необязательный
окно с вводом текста и кнопками Ok, Отмена
// Не будет ошибкой
let message = "hello";
message = 123456;
Это называется "динамическая типизация" - переменная не привязана ни к одному типу данных
typeof
возвращает тип аргумента. Обычно используется в проверках. Может работать как в скобках, так и без. type x; type(x)
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
symbol
используется для создания уникальных идентификаторов в объектах.
object
В отличии от остальных "примитивных", object - особенный. В них хранятся коллекции данных или более сложные структуры
"undefined"
Это тоже не тип данных. Означает "значение не было присвоено".
let age;
alert(age); // выведет "undefined"
обычно используется для проверок, была ли переменная назначена
"null"
это не тип данных. Он показывает что значение переменной неизвестно "ничего", "пусто"
let age = null;
boolean
true/false
let isGreater = 4 > 1;
alert( isGreater ); // true (результатом сравнения будет "да")
String
В С и Java для одного символа есть тип данных char. В JS один символ это тоже String
Есть 3 типа кавычек
`_` а это функциональные кавычки. Позволяют вставлять какое-то выражение в строку
let name = "Иван";
// Вставим переменную
alert( `Привет, ${name}!` ); // Привет, Иван!
// Вставим выражение
alert( `результат: ${1 + 2}` ); // результат: 3
"_" и '_' нечем не отличаются
number
number не может содержать число больше (2^53-1) (т. е. 9007199254740991)
Когда число реальное большое (в криптографии, например), используется тип BigInt (число произвольной длинны). Для этого достаточно добавить n в конце числа
// символ "n" в конце означает, что это BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Тут как целочисленные, так и с плавающей точкой
Кроме обычных чисел, существуют "спец. числовые значения", которые относятся к таким типам данных
Эти ошибки безопасны - т.е. скрипт не встанет с фатальной ошибкой. В худшем случае получим NaN
NaN
Вычислительная ошибка. Например, когда строку делам на число
Возвращает NaN
-Infinity
Infinity
Математическая бесконечность (Например, это деление на ноль)
Возвращает Infinity
Пожалуйста, потратьте больше времени на обдумывание правильного имени переменной перед её объявлением.
не используй повторно одну и ту же переменную. Дополнительная переменная - это добро, а не зло.
data и value - плохие. Можно, только если очевидно какие данные хранит переменная
userName или shoppingCart - хорошие
Неизменяемые константы писать КАПСОМ
Есть константы, которые вычисляются во время выполнения сценария, но не изменяются после их первоначального назначения.
const pageLoadTime = /* время, потраченное на загрузку веб-страницы */;
const часто используется для труднозапоминаемых значений. пишутся капсом и с _
const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";
// ...когда нам нужно выбрать цвет
let color = COLOR_ORANGE;
alert(color); // #FF7F00
COLOR_ORANGE
гораздо легче запомнить, чем "#FF7F00"
.const - попытка изменить константу приведет к ошибке. Если уверен, что переменная никогда не будет меняться, создаем константу
let $ = 1; // объявили переменную с именем "$"
let _ = 2; // а теперь переменную с именем "_"
alert($ + _); // 3
эти имена являются допустимыми
В Scala, Erland значение однажды заданной переменной менять уже нельзя. Это дает преимущества при параллельном вычислении.
Можно объявлять несколько переменных в 1 строке. Но лучше так не делать.
let user = 'John', age = 25, message = 'Hello';
Очень желательно добавлять "use strict" в начале скриптов. Позже, когда весь код будет состоять из классов и модулей, директиву можно будет опустить
строчка "use strict" в начале всего кода указывается для того, чтобы устаревший код работал. Это значит что сценарий работает в современном режиме.
"use strict";
// этот код работает в современном режиме
...
Со строчкой "use strict" т.е. в строгом режиме можно находить ошибки быстрее. Избегать в коде устаревших вещей, которые будут приводить к ошибкам.
В консоли браузера "use strict" по умолчанию выключен
Когда это имеет значение, можно получить неправильные результаты. Нужно просто его дописать через Shift+Enter
В старых браузерах он указывается внутри функции
(function() {
'use strict';
// ...ваш код...
})()
Когда входим в строгий режим, то отменить его уже нельзя
Обычно его используют для всего файла. Указывается в самом начале файла
Его можно использовать как для всего кода, так и для отдельных функций
// код здесь обрабатывается в неограниченном режиме function f() { "use strict"; // код здесь обрабатывается в строгом режиме } // код здесь обрабатывается в неограниченном режиме
/*многострочный комментарий*/
Инструкции отделяются знаком ; Инструкций может быть сколько угодно
alert('Привет'); alert('Мир');
Обычно все инструкции пишут с новой строчки для удобства. В этом случае не обязательно ставить ; Будет работать и без них.
alert('Привет')
alert('Мир')
Он интерпретирует это как "неявную" точку с запятой. Но он и понимает "незавершенные выражения", и тогда воспринимает это как 1 строку.
alert(3 +
1
+ 2);
в ответе будет 6
Есть ситуации, когда JS все же неправильно понимает разделение. Так что лучше всегда ставить ; Это правило широко распространено среди разработчиков.
alert('Привет, мир!') - это инструкция. т.е. команды, которые выполняют действия
<!DOCTYPE HTML> <html> <body> <p>Перед скриптом...</p> <script> alert( 'Привет, мир!' ); </script> <p>...После скрипта.</p> </body> </html>
атрибуты type и language необязательны
Если для тега
<script src="file.js">
alert(1); // содержимое игнорируется, так как есть атрибут src
</script>
Если JS кода много, то его лучше поместить в отдельный файл
<script src="/path/to/script.js"></script>
Как правило только простейшие скрипы указываются внутри HTML. Более сложные создаются в отдельном файле.
Польза от отдельных файлов в том, что браузер загрузит скрипт отдельно и сможет хранить его в кеше (web cache)
другие страницы, которые подключают тот же скрипт, смогут брать его из кеша вместо повторной загрузки из сети. Таким образом файл будет загружаться из сети только 1 раз.
Для подключения нескольких скриптов, используется несколько тегов
<script src="/js/script1.js"></script>
<script src="/js/script2.js"></script>
Можно указать ссылку на скрипт
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js"></script>
Brython
Транспилирует Python в JS
Dart
Предложен Google. ЯП для создания польз. интерфейсов.
Flow
от Facebook
TypeScript
от Microsoft
CoffeeScript
Вводит более короткий синтаксис, код лаконичнее.
Возможности зависят от того, как каком окружении он работает.
Что он НЕ МОЖЕТ. Возможности JS в браузере ограничены ради безопасности пользователя.
JS с одной страницы, не умеет доступа у другой странице, если они пришли с разных сайтов (с другого домена, протокола или порта)
Страница http://anysite.com не должна иметь доступ к другой вкладке браузера с другим URL
Но это ограничение не действует, если JS используется вне браузера, например - на сервере. Современные браузеры предоставляют плагины, расширения, с помощью которых можно запрашивать доп. разрешения.
Это называется "политика одинакового источника" (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны содержать JS код который спец. образом обменивается данными.
Включить камеру, микрофон можно только с явного разрешения пользователя. Страница с JS не может незаметно включать веб-камеру
JS на веб-странице не может/читать/записывать файлы на жесткий диск, копировать или запускать программы. Он не умеет доступа к системным функциям ОС
Это возможно, только если пользователь перетаскивает файл в браузер, или выбирает его через
В браузере ему ДОСПУПНО всё. Манипулировать веб-страницами, взаимодействовать с пользователем и веб-сервисом.
Запоминать данные на стороне клиента - local storage
local storage
Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения.
Может скачивать и загружать файлы (технологии AJAX, COMET)
COMET
AJAX
Может отправлять сетевые запросы на удаленные сервера
Может реагировать на действия пользователя, щелчки мыши, перемещение указателя, нажатие клавиш.
Может добавлять HTML код на страницу, изменить существующее содержимое, менять стили.
В окружении Node.JS он поддерживает функции чтения/записи файлов, выполнения сетевых запросов ит.д.
NodeJS
Движок работает так:
3. Запускается машинный код и работает достаточно быстро
2. Компилируем в машинный язык.
1. Читает текст скрипта
У разных браузеров свои названия движков (которые полезно знать)
У firefox - SpiderMonkey
У хрома - V8
Скрипты не нуждаются в компиляции