Привет! Всем привет!!! В этой статье я расскажу о странных и фантастических особенностях и характеристиках странного JavaScript. JavaScript — это очень необычный язык программирования. Он не похож на другие языки программирования, но при этом является мощным языком. Его можно использовать для создания фронтенд- и бэкенд-приложений, мобильных и настольных приложений. Посетите мою предыдущую статью, чтобы узнать больше об основах JavaScript. => Современный JavaScript объясняется так, как вы еще никогда не видели 🔥.
Итак, без лишних слов перейдем непосредственно к его странностям.
!10 + !10
!10 + !10 ---> 0
Положительные числа в javascript всегда истинны.
Логическое не (!) представляет собой противоположность. Таким образом, противоположностью true является false.
Следовательно, false преобразуется в 0.
Поэтому ответом будет 0.
[] + []
[] + [] ---> ""
При использовании оператора сложения оба операнда — левый и правый — преобразуются в примитивы.
Преобразование массива в примитив возвращает его значение по умолчанию, которое для объектов с действующим методом toString() является результатом вызова object.toString().
Для массивов это то же самое, что и вызов array.join().
Объединение пустого массива приводит к пустой строке.
Следовательно, оператор сложения возвращает конкатенацию двух пустых строк, которая является пустой строкой.
Для еще более подробного объяснения читайте статью доктора Акселя Раушмайера =>.
[2,4,6,8,10] + [12,14,16,18] = «2,4,6,8,1012,14,16,18»
[2,4,6,8,10] + [12,14,16,18] ---> "2,4,6,8,1012,14,16,18"
Массивы преобразуются в строки и затем конкатенируются.
Это происходит по тому же правилу, что и выше.
NaN === NaN
NaN === NaN ---> false
Так как это решение было принято комитетом IEEE-754.
Функция isNaN не существовала в то время.
Для подробного объяснения читайте ответ на StackOverflow от =>Stephen Canon
NaN++
NaN++ ---> NaN
NaN буквально означает Not A Number.
Следовательно, NaN не может быть увеличено.
undefined + true | undefined + false
undefined + true ---> NaN
undefined + false ---> NaN
True и False могут быть преобразованы в числа.
undefined не может быть преобразовано в число.
Однако !!undefined + false => 0, потому что (!!undefined означает false).
!!undefined === false — истина
Следовательно, если сложить undefined с любым булевым числом, результатом всегда будет NaN.
+0 === -0
+0 === -0 ---> true
Положительный ноль и отрицательный ноль всегда равны в JavsScript.
[,,,].length
[,,,].length ---> 3
Этот [,,,] просто означает массив, содержащий три пустых слота.
Последняя запятая является запятой в конце.
true + false
true + false ---> 1
Оба булевых числа преобразуются в соответствующее числовое представление, и их значения складываются.
Число(true) —> 1
Число(false) —> 0
1 + 0 —> 1
0.2 + 0.1 === 0.3
0.2 + 0.1 === 0.3 ---> false
Просто подумайте о представлении 1/3 в виде десятичного значения. Это невозможно сделать точно! Точно так же 1/10 (десятичная дробь 0.1) не может быть точно представлена в двоичном виде как «десятичное» значение; повторяющийся шаблон после десятичной дроби продолжается до бесконечности. Это значение не является точным, и поэтому вы не можете выполнять с ним точные вычисления, используя обычные методы с плавающей точкой.
2,4 | 1,2,3,4,5 | «причуды», «особенности»
2,4 ---> 4
1,2,3,4,5 ---> 5
"quirks","features" ---> "features"
Оператор запятая (,) оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
!!»»
!!"" ---> false
Булево представление пустой строки(«») равно false.
Boolean(«») —> false
Итак, !!false —> false
Внутри логического оператора Not(!) все, что имеет значение, является истинным, а все, что не имеет значения, является ложным.
+!![]
+!![] ---> 1
Булево представление пустого массива [] — истина.
!!!true всегда истина.
Оператор плюс преобразует в числовое представление данного булева значения.
Следовательно, +true равно 1.
true == «истина» —> false
true == "true" ---> false
Оба эти значения преобразуются в числа.
Число(true) —> 1
Number(«true») —> NaN
Следовательно, 1 == NaN является ложным
020 — 05
020 - 05 ---> 11
020 в JavaScript рассматривается как восьмеричное число.
Его значение в десятичной системе счисления равно 16.
Следовательно, 16 — 5 равно 11
«» — — «»
"" - - "" ---> 0
Пустая строка преобразуется в 0
Буквально это означает (+0) — (-0).
Следовательно, (+0) — (-0) — это ноль.
ноль + 420
null + 420 ---> 420
Числовое представление нуля всегда равно 0.
Число(null) —> 0
Следовательно, 0 + 420 равно 420
(ноль — 0) + «0».
(null - 0) + "0" ---> "00"
Число (null) равно 0
Таким образом, 0 — 0 равно 0.
0 + «0» объединяет их и дает в качестве ответа «00».
Следуйте за мной на Github и в Twitter