Типы данных

Объекты Примитывы
Object number
Array string
Function boolean
RegExp undefined
Arguments null

Существуют примитивные типы данных: string, number, boolean - они immutable (не изменяемые), после их инициализации - изменить нельзя. Если мы делаем:

var s  = 'Hello';
s += ' world!';

На самом деле создается новая строка 'Hello world!' и записывается в переменную s; Так же существуют классы обертки: String, Number, Boolean. Они используются только для внутренней реализации. Например:

var s = 'hello';
s = s.toUpperCase(); //HELLO

метод toUpperCase() принадлежит классу-обертке String, поэтому интерпретатор создает new String(s), потом выполняет метод. Полученную строку записывает в переменную s, а объект new String() удаляется.

Не стоит самостоятельно создавать переменные через эти обертки, могут возникнуть странные ситуации:

var check = new Boolean(false);
if(check){
    alert('Bingo'); //мы увидем сообщение, т.к. check - это объект, а объект в логических выражения всегда интерпретируется как true
};

Примитивы передаются по значению, тоесть:

var x = 0, y = 1;
function pow(x, y){
    // внутри функции будут созданны временные переменные x', y' и все операции будут произведены над ними, а оригинальные x, y останутся не тронутыми
    var tmp = x;
    x = y;
    y = tmp;
};

pow(x, y);
console.log(x); //x = 0;
console.log(y); //y = 1;

Примитивы null и undefined не преобразуются в объект.

Также существуют Объекты, например массив это на самом деле объект Array. Они передаются по ссылке:

var test = {x: 0, y: 1};
function pow(obj){
    var tmp = obj.x;
    obj.x = obj.y;
    obj.y = tmp;
};

pow(test);
console.log(test.x); //x = 1;
console.log(test.y); //y = 0;

Оператор typeof - может вернуть (в виде строки):

  • number
  • string
  • boolean
  • object (при object, array, null)
  • function
  • undefined
Number

На один number отводится 64 бит, один (самый левый) отведен на знак припинания, 53 это на целочисленное значение, оставшиеся на местополежение дробной части (точки). Для проведения побитовых операций, число преобразуется к 32 битному. Чтобы преобразовать число в отрицательное нужно:

  • преобразовать 0 в 1, а 1 в 0
  • прибавить к полученному значению 1

Перобразование в двоичную форму и обратно:

parseInt('11000', 2); //выведет 24

var num = 24;
num.toString(2); //выведет 11000

2.toString(); //выдаст SyntaxError, т.к. интерпретатор решит что 2. - это число с плавающей точкой

//следующий код выдаст строку
2..toString();
2 .toString();
(2).toString();
String

На каждый символ в string отводится 16 бит.

Boolean

Нужно запомнить 7 "ложных" значений которые дают false:

  • '' (пустая строка)
  • 0, -0, NaN (не коректное число)
  • null, undefined
  • false

все остальные значения при приведении к логическому значению дают true

Операции типами данных

Приведение в boolean:

  • любой объект всегда к true (даже Boolean(false))
  • число приводится к false если равно +-0 или NaN. В остальных случаях true
  • пустая строка к false, остальные к true
  • undefined, null к false

Привести к логическому типу можно с помощью:

var s = 'hello';
var ss = '';

!!s; \\ true
!!ss; \\false

Приведение к строке:

var s = new String(bar);

var s = '' + bar;

Чтобы привести объект к строке, сначало ищется метод valueOf() - если он вернул не примитив - тогда метод toString()

Приведение к числу:

var i = new Number(bar);

var i = +bar;
  • Чтобы привести объект к числу, сначало вызывается valueOf(), потом toString()
  • true приводит к 1
  • false приводит к 0
  • null - 0
  • undefined - NaN Строки:
  • пустая - 0
  • 'Infinity' - infinity
  • если строка начинается в цифр, то приводтся до появления симлова не входящего в обозначения числа (может начинатся с -, 0, 0x, лубого числа)

Приведение числа к строке:

(30).toString(); //'30' - по умолчанию по основанию 2
(30).toString(2); //100000
(30).toStrign(16); //20

0.1 + 0.2 // 0.300000000000004
(0.1 + 0.2).toFixed(2); //'0.30'

Материал взят из MDN - Error

results matching ""

    No results matching ""