-
Notifications
You must be signed in to change notification settings - Fork 0
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 // 5
string |
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 --> false
a = true, b = null
a > b // 1 > null --> true ( 1 > 0 )
a < b // 1 < null --> false
a == b // 1 == null --> false
string |
number |
---|
Преобразование типов к логическому типу ( boolean
) происходит в условных операторах ( if
, тернарный оператор )
if ( "5" ) console.log ( "Yes" )
Будет вычисляться логическое значение выражения в круглых скобках оператора if
, т.е. "под капотом" будет выполнена операция
Boolean ( "5" )
При выполнении логических операций
||
и &&
происходит неявное приведение типов операндов
к логическому значению, но при этом результатом логической операции будет изначальное значение одного из операндов, даже если оно не являются булевым
Операция &&
перебирает операнды слева направо, приводя их к логическому значению, до тех пор, пока не встретится первый false
в этом случае возвращается исходное значение последнего операнда
true && false && null // false
true && "5" && null // null
true && [] && null // null
true && ![] && null // false
вычисляется значение второго операнда ![]
, оно будет false
, операция останавливается и возвращается последний операнд, на котором остановились )
true && true && true && true // true
дошли до конца, но не встретили false
, возвращается последний операнд
Операция ||
перебирает операнды слева направо, приводя их к логическому значению, до тех пор, пока не встретится первый true
в этом случае возвращается исходное значение последнего операнда, на котором остановились
null || false || 5 || "" // 5
null || "" || 0 || 4 || 10 // 4
null || false || undefined || "" // ""
последовательно вычисляются логические значения
первого операнда (
null
) - этоfalse
,
второго операнда -
false
,
третьего операнда (
undefined
) - этоfalse
,
четвертого операнда (
""
) - этоfalse
больше операндов нет, операция завершается и возвращает последний операнд, на котором остановилась (
""
)
можно привести переменную любого типа к boolean
с помощью логической операции двойного отрицания:
var x = null
var y = !!x // false
var x = undefined
var y = !!x // false
!![ ] // вернет true
!!+[ ] // вернет false
string |
number |
boolean |
---|
![]() |
![]() |
---|
Курсы были созданы для студентов A-Level Ukraine.
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав.
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
- Нативные и host-объекты
- Литерал объекта
- Унаследованные свойства
- Конструктор
- Модель наследования
- Публичные и приватные свойства
- Оператор in
1
Homework
- Итерирующие методы массивов
- Тестирование производительности
- SHA
Homework
- strict mode
- Вычисляемые имена свойств
- Краткий синтаксис методов
- Краткий литерал объекта
- Классы
Homework
- npm
- webpack
Упражнение 1
- ES6 модули
Упражнение 2
- --mode | --watch
Упражнение 3
Упражнение 4
Упражнение 5
Упражнение 6
Упражнение 7
Упражнение 8
Homework
⏫ |
---|