-
Notifications
You must be signed in to change notification settings - Fork 16
Implicit type conversion
Неявное приведение типов происходит в процессе вычисления выражений
number |
boolean |
|---|
При сложении числа и строки JavaScript обрабатывает число как строку
Например, после выполнения кода:
var res = 20 + "5"значением переменной res будет строка "205"
JavaScript вычисляет выражения слева направо
В результате выполнения кода:
var res = 20 + 10 + "5"в переменной res будет значение "305",
а в результате выполнения кода:
var res = "3" + 20 + 10в переменной res будет значение "32010"
При сложении массива и любого другого операнда результат будет строкового типа ( string )
[ ] + 5 // "5"
[ ] + false // "false"
[ 4 ] + NaN // "4NaN"
[ 4, 8 ] + null // "4,8null"
null + [ 4, 8 ] // "null4,8"Это происходит потому, что массив преобразуется в строку:
String ( [ 4, 8 ] )и результат будет 4,8
Однако, если в массиве не более одного элемента, и перед массивом стоит знак арифметической операции,
он будет приведен к числу:
null + +[ 4 ] // 4
+[5] + null // 5string |
boolean |
|---|
Неявное приведение к типу number происходит в арифметических выражениях:
var x = "8" / 2( значением переменной x будет 4 )
При участии в арифметических операциях пустая строка ( "" ) и пустой массив ( [] ) преобразуется в 0:
var x = ""
var y = x / 5( выражение "" / 5 будет приведено к 0 / 5 )
console.log ( +"" ) // 0
console.log ( +[] ) // 0
console.log ( +[]+"" ) // 0
Если в арифметическом выражении участвуют специальные значения undefined или null, то они преобразуются к числу так:
Number ( undefined ) // NaN
Number ( null ) // 0
Если в арифметическом выражении участвуют логические значения true или false, то они преобразуются к числу так:
var a = false
var b = true
var z = a + b // 0 + 1 --> 1
Кроме арифметических операций, преобразование к типу number происходит при участии переменной в операциях сравнения ( за исключением операций === и !==, когда сравниваются не только значения, но и типы данных )
a = false, b = undefined
a > b // 0 > NaN --> false
a < b // 0 < NaN --> false
a == b // 0 == NaN --> falsea = true, b = null
a > b // 1 > null --> true ( 1 > 0 )
a < b // 1 < null --> false
a == b // 1 == null --> falsestring |
number |
|---|
Преобразование типов к логическому типу ( boolean ) происходит в условных операторах ( if, тернарный оператор )
if ( "5" ) console.log ( "Yes" )Будет вычисляться логическое значение выражения в круглых скобках оператора if, т.е. "под капотом" будет выполнена операция
Boolean ( "5" )
При выполнении логических операций || и && происходит неявное приведение типов операндов
к логическому значению, но при этом результатом логической операции будет изначальное значение одного из операндов, даже если оно не являются булевым
Операция && перебирает операнды слева направо, приводя их к логическому значению, до тех пор, пока не встретится первый false
в этом случае возвращается исходное значение последнего операнда
true && false && null // false
true && "5" && null // null
true && [] && null // nulltrue && ![] && null // falseвычисляется значение второго операнда ![], оно будет false, операция останавливается и возвращается последний операнд, на котором остановились )
true && true && true && true // trueдошли до конца, но не встретили false, возвращается последний операнд
Операция || перебирает операнды слева направо, приводя их к логическому значению, до тех пор, пока не встретится первый true
в этом случае возвращается исходное значение последнего операнда, на котором остановились
null || false || 5 || "" // 5
null || "" || 0 || 4 || 10 // 4null || false || undefined || "" // ""последовательно вычисляются логические значения
первого операнда (
null) - этоfalse,
второго операнда -
false,
третьего операнда (
undefined) - этоfalse,
четвертого операнда (
"") - этоfalse
больше операндов нет, операция завершается и возвращает последний операнд, на котором остановилась (
"")
можно привести переменную любого типа к boolean с помощью логической операции двойного отрицания:
var x = null
var y = !!x // falsevar x = undefined
var y = !!x // false!![ ] // вернет true
!!+[ ] // вернет falsestring |
number |
boolean |
|---|
w3schools |
Equality in JavaScript |
|---|
© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 |
| ⏬ |
|---|
- Блок-схема алгоритма
- Developer Tools
- Chrome DevTools
- Переменные
- Оператор typeof
- Структуры данных
- Операторы присваивания
- Логические выражения
- Условные операторы
- Инкремент
- Свойство length
- Оператор цикла for
- UTF-8
Homework
- Приведение типов
- NaN | null | Infinity
- BigInt (ES10)
- Функции
- Методы
- Методы строк
- Методы массивов
- Date ()
Самостоятельная работа
Практика (XSS)
Homework
- Циклы while и do...while
- Циклы for...of и for...in
- Параметры по умолчанию
- Объект function
Практика
Homework
- Нативные и host-объекты
- Литерал объекта
- Унаследованные свойства
- Конструктор
- Модель наследования
- Публичные и приватные свойства
- Оператор in
1
Homework
- Итерирующие методы массивов
- Тестирование производительности
- SHA
Homework
- Размеры и прокрутка элемента
- Event Loop
- async | await
- API
- REST | HATEOAS
- status codes
JSON placeholder-
JSON server
fake chat
Homework
- strict mode
- Вычисляемые имена свойств
- Краткий синтаксис методов
- Краткий литерал объекта
- Классы
Homework
- :not(:defined)
- Shadow DOM
- Custom elements
- Lifecycle hooks
- whenDefined
- <template>
- slot
1
2
3
Homework
- npm
- webpack
Упражнение 1- ES6 модули
Упражнение 2- --mode | --watch
Упражнение 3
Упражнение 4
Упражнение 5
Упражнение 6
Упражнение 7
Упражнение 8
Homework
| ⏫ |
|---|
Неявное приведение типов
Неявное приведение к типу
Упражнения
w3schools

Справочная инфо
Git Bush
TCP/IP