JavaScript - это слабо типизированный язык, что означает, что вам не нужно заранее указывать, какой тип информации будет храниться в переменной. JavaScript автоматически вводит переменную в зависимости от того, какую информацию вы ей назначаете (например, ''
или " "
для обозначения строковых значений). Многие другие языки, например Java, требуют объявления типа переменной, например int, float, boolean или String.
Это одновременно и благословение, и проклятие.
Хотя система типов JavaScript дает вам большую гибкость, ей не хватает способности строго типизированной системы кричать на вас, когда вы пытаетесь добавить int к объекту, что защищает вас от тратить часы на отладку ошибки типа.
Вот несколько полезных советов, которые помогут вам ориентироваться в системе странных типов JavaScript.
Тип №1
всякий раз, когда тип переменной вызывает сомнения, вы можете использовать оператор typeof
:
typeof 1 //> “number” typeof “1” //> “string” typeof [1,2,3] //> “object” typeof {name: “john”, country: “usa”} //> “object” typeof true //> “boolean” typeof (1 === 1) //> “boolean” typeof undefined //> “undefined” typeof null //> “object” const f = () => 2 typeof f //> “function”
Вывод: если тип вызывает сомнения, используйте typeof
.
# 2 Двойное равенство против тройного равенства
===
означает «равенство без приведения типов». Используя тройное равенство, значения также должны быть одинаковыми по типу.
1 == “1” //> true 1 === “1” //> false null == undefined //> true null === undefined //> false "0" == false //> true "0" === false //> false 0 == false //> true 0 === false //> false, because they are of a different type
Обратите внимание, вы можете использовать !==
для проверки неравенства с приведением типов:
1 != "1" //> false 1 !== "1" //> true
Вывод: всегда используйте ===
, так как это более тщательная проверка и поможет избежать неприятных ошибок.
№3 Проверка на ложность
Используя оператор !
(называемый оператором «взрыва») для проверки на ложность, мы замечаем следующее:
![] //> false !42 //> false !"hello world" //> false !null //> true !undefined //> true !0 //> true !"" //> true !false //> true
null
, undefined
, 0
, “”
и false
все вернули истину, когда мы применили оператор !
. Когда мы применили оператор !
к существующим вещам, например к числу 42 или строке «hello world», мы получили false.
Это показывает, что null
, undefined
, 0
, “”
и false
все представляют несуществующие или ложные значения, но не одинаково. 0
- это число, обозначающее отсутствие количества. “”
- это строка, обозначающая отсутствие вещества в строке. И, наконец, false
является логическим значением и означает отсутствие истины. Это можно проверить с помощью простого typeof
:
typeof 0 //> "number" typeof "" //> "string" typeof false //> "boolean"
undefined
и null
сложнее. Как показано в приведенном ниже примере, это разные типы, они имеют одинаковое значение, но ===
сравнение не выполняется:
typeof undefined //> “undefined” typeof null //> “object” undefined == null //> true undefined === null //> false
Поскольку null
- это объект, мы можем добавить к нему число. Для undefined
, однако, добавление числа дает NaN
.
null + //> 1 undefined + 1 //> NaN
Иногда кажется, что добавление числа к null
может быть хорошим ярлыком, но не делайте этого!
Хотя null
является объектом, вы получаете число, когда добавляете к нему число. Однако, когда вы добавляете к нему другие вещи, он дает вам бессмысленные строки:
null + [1,2,3]//> "null1,2,3" null + ["hello", "world"] //> "nullhello,world" null + {0: "hello", 1: "world"} //> "null[object Object]"
Основные выводы:
- Вы должны быть осторожны, когда проверяете правдивость. Используйте
===
и проверяйте все типы потенциальных ложных значений, например,if(foo === undefined || foo === null) ...
, что может оказаться довольно утомительным. - Не добавляйте элементы в
null
. - Лучше всего проверять ложность, используя оператор
!
для проверки всех ложных значений, то естьnull
,undefined
,0
,“”
иfalse
, за одно действие.
Спасибо за чтение!
Если вы считаете, что эта статья была полезной, ознакомьтесь с другими статьями и руководствами, которые я написал по JavaScript: