В этой статье собраны особенности базовых типов данных, которые важны для программистов из других областей.
В Javascript есть и объектные типы данных и элементарные, которые можно интерпретировать как объекты.

Элементарные - создаются простым указанием данных:
var orange = "Апельсин"
Объектные - например, через оператор new:
var orange = new String("Апельсин")
На практике, хотя для каждого элементарного типа есть соответствующий объект, использовать их не рекомендуется. Это - отмершая часть языка.
var ok = new Boolean(true) // не надо
Элементарные типы автоматически интерпретируются как объекты при вызовах методов, поэтому можно, определять длину строки как:
alert("Апельсин".length)
Поэтому иногда говорят, что в javascript - все объекты. Так удобно думать, но определенная разница все же есть.
Например, typeof выдаст разный результат:
alert(typeof "test")
alert(typeof new String("test"))
Это - еще одна причина избегать использования объектов там, где существует элементарный тип: меньше путаницы.
Преобразование типа можно явным образом сделать через его название:
var test = Boolean("something") // true
Кроме всем известных типов данных - в javascript есть специальное значение undefined, которое, условно говоря, обозначает что "данных нет". Не null, а данных нет. Понимайте как хотите.
Далее рассмотрим особенности каждого из этих типов.
Все числа хранятся в формате float64, т.е 8 байт с плавающей точкой. В этом формате не всегда возможны точные вычисления.
Например,
alert(0.1+0.2) // выведет не 0.3!
При операциях с Number - никогда не происходят ошибки. Зато могут быть возвращены специальные значения:
Бесконечность бывает полезно использовать в обычном коде. Например, положительная бесконечность Number.POSITIVE_INFINITY больше любого Number, и даже больше самой себя.
NaN - особый результат.
Для этого используется метод toFixed.
0.1234.toFixed(2) = 0.12
Стандартно конвертация осуществляется вызовом Number(). Можно и попроще: +str.
// эквивалентные записи var str = "002" var a = Number(str) // 2 // нечисла превращаются в NaN +"0.1" // => 0.1 +"0.1z" // => Number.NaN
Кроме жесткой конвертации есть и более мягкая фильтрация в число:
// обрезается все после числа
parseFloat("0.1zf") = 0.1
parseInt("08f.4", 10) = 8
// тут числа вообще нет, поэтому NaN
parseFloat("smth") = Number.NaN
parseFloat , parseInt переводят слева направо, пока это возможно. Если вообще невозможно - то NaN.
Второй аргумент parseInt - основание системы счисления. Если его нет, то система сама пытается угадать систему счисления:
parseInt("0x10") = 16 // т.к 0x обозначает 16-ричную систему
parseInt("010") = 8 // т.к ведущий 0 обозначает 8-ричную систему
// если хотите без сюрпризов - указывайте основание явно
parseInt("010",10) = 10
Все математические функции находятся в "пакете" Math. Не то, чтобы в javascript есть реальные пакеты, просто так получилось.
Строки в javascript - полностью юникодные.
Как это обычно и бывает, в регулярках символ \w обозначает латинские буквоцифры или подчеркивание, но не русские буквы.
Длина строки хранится в свойстве length.
В javascript - особый список значений, которые при приведении к Boolean становятся false. Он отличается, например, от аналогичного списка в PHP.
Чтобы привести значение к булевому - используется либо явное указание типа: Boolean(a), либо двойное отрицание: !!a
Boolean(a) == !!a