Val to string javascript

The `toString()` Function in JavaScript

Most JavaScript objects and primitive values have a toString() function that converts the value to a string. Many built-in methods use toString() under the hood, like the browser’s alert() function.

Primitives

JavaScript number primitives have a toString() function that converts the number to a string. This is one of the most common uses for toString() :

const num = 42; num.toString(); // '42' typeof num.toString(); // 'string' // Can also use `toString()` on a number literal as long as you // use parentheses. (42).toString(); // '42'

All primitive values except null and undefined have a toString() function: strings, numbers, booleans, BigInts, and symbols.

// String: 'Hello'.toString(); // 'Hello' // Number: (42).toString(); // '42' // Boolean: true.toString(); // 'true' // BigInt: 42n.toString(); // '42' // Symbol: Symbol('test').toString(); // 'Symbol(test)'

The important takeaway is that it is safe to call toString() on an arbitrary JavaScript value as long as that value is not null or undefined . The easiest way to check is to use == null : the most common use for == is that v == null is shorthand for v === null || v === undefined .

if (v != null) < // Won't throw an error, unless you wrote a custom `toString()` that throws v.toString(); >

Objects

The Object class in JavaScript is the base class for all objects, and it has a simple toString() method that usually prints [object Object] :

// Equivalent to `const obj = <>;` const obj = new Object(); obj.toString(); // '[object Object]'

The [object Object] output is often confusing to beginners because they want to see the object’s keys and values. You can loop over the object’s keys and values yourself, but the easiest one-liner is to use JSON.stringify() .

const obj = < name: 'Jean-Luc Picard', rank: 'Captain' >; // '' console.log(JSON.stringify(obj));

If you define a JavaScript class, you can overwrite the toString() function to return whatever you want:

class MyClass < toString() < return 'Hello, World!'; > > const obj = new MyClass(); obj.toString(); // 'Hello, World!'

toString() Parameters

Some toString() functions take parameters, most notably numbers and Node.js buffers.

The toString() function for JavaScript numbers takes a radix parameter that defines the base of the numeral system. In other words, num.toString(2) converts the number to a binary number string, num.toString(10) converts the number to a base-10 string, and num.toString(16) converts the number to a hexadecimal string.

(3).toString(2); // '11' (42).toString(10); // '42' (29).toString(16); // '1d'

The Node.js buffer toString() function takes an encoding parameter that is usually one of ‘utf8’, ‘hex’, or ‘base64’. This determines how the raw data in the buffer is encoded.

const fs = require('fs'); const buf = fs.readFileSync('./package.json'); buf.toString('utf8'); // '< "name": "masteringjs.io", . >'

More Fundamentals Tutorials

Источник

Читайте также:  Таблицы с html кодами

Преобразование типов

Чаще всего операторы и функции автоматически приводят переданные им значения к нужному типу.

Например, alert автоматически преобразует любое значение к строке. Математические операторы преобразуют значения к числам.

Есть также случаи, когда нам нужно явно преобразовать значение в ожидаемый тип.

В этой главе мы не касаемся объектов. Сначала мы разберём преобразование примитивных значений.

Мы разберём преобразование объектов позже, в главе Преобразование объектов в примитивы.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.

Например, alert(value) преобразует значение к строке.

Также мы можем использовать функцию String(value) , чтобы преобразовать значение к строке:

let value = true; alert(typeof value); // boolean value = String(value); // теперь value это строка "true" alert(typeof value); // string

Преобразование происходит очевидным образом. false становится «false» , null становится «null» и т.п.

Численное преобразование

Численное преобразование происходит в математических функциях и выражениях.

Например, когда операция деления / применяется не к числу:

alert( "6" / "2" ); // 3, строки преобразуются в числа

Мы можем использовать функцию Number(value) , чтобы явно преобразовать value к числу:

let str = "123"; alert(typeof str); // string let num = Number(str); // становится числом 123 alert(typeof num); // number

Явное преобразование часто применяется, когда мы ожидаем получить число из строкового контекста, например из текстовых полей форм.

Если строка не может быть явно приведена к числу, то результатом преобразования будет NaN . Например:

let age = Number("Любая строка вместо числа"); alert(age); // NaN, преобразование не удалось

Правила численного преобразования:

Значение Преобразуется в…
undefined NaN
null 0
true / false 1 / 0
string Пробельные символы (пробелы, знаки табуляции \t , знаки новой строки \n и т. п.) по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN .
alert( Number(" 123 ") ); // 123 alert( Number("123z") ); // NaN (ошибка чтения числа на месте символа "z") alert( Number(true) ); // 1 alert( Number(false) ); // 0

Учтите, что null и undefined ведут себя по-разному. Так, null становится нулём, тогда как undefined приводится к NaN .

Большинство математических операторов также производит данное преобразование, как мы увидим в следующей главе.

Логическое преобразование

Логическое преобразование самое простое.

Происходит в логических операциях (позже мы познакомимся с условными проверками и подобными конструкциями), но также может быть выполнено явно с помощью функции Boolean(value) .

  • Значения, которые интуитивно «пустые», вроде 0 , пустой строки, null , undefined и NaN , становятся false .
  • Все остальные значения становятся true .
alert( Boolean(1) ); // true alert( Boolean(0) ); // false alert( Boolean("Привет!") ); // true alert( Boolean("") ); // false

Некоторые языки (к примеру, PHP) воспринимают строку «0» как false . Но в JavaScript, если строка не пустая, то она всегда true .

alert( Boolean("0") ); // true alert( Boolean(" ") ); // пробел это тоже true (любая непустая строка это true)

Итого

Существует 3 наиболее широко используемых преобразования: строковое, численное и логическое.

Читайте также:  Unit tests mocking java

Строковое – Происходит, когда нам нужно что-то вывести. Может быть вызвано с помощью String(value) . Для примитивных значений работает очевидным образом.

Численное – Происходит в математических операциях. Может быть вызвано с помощью Number(value) .

Преобразование подчиняется правилам:

Значение Становится…
undefined NaN
null 0
true / false 1 / 0
string Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN .

Логическое – Происходит в логических операциях. Может быть вызвано с помощью Boolean(value) .

Значение Становится…
0 , null , undefined , NaN , «» false
любое другое значение true

Большую часть из этих правил легко понять и запомнить. Особые случаи, в которых часто допускаются ошибки:

  • undefined при численном преобразовании становится NaN , не 0 .
  • «0» и строки из одних пробелов типа » » при логическом преобразовании всегда true .

В этой главе мы не говорили об объектах. Мы вернёмся к ним позже, в главе Преобразование объектов в примитивы, посвящённой только объектам, сразу после того, как узнаем больше про основы JavaScript.

Источник

Преобразование типов для примитивов

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/type-conversions.

Система преобразования типов в JavaScript очень проста, но отличается от других языков. Поэтому она часто служит «камнем преткновения» для приходящих из других языков программистов.

Всего есть три преобразования:

  1. Строковое преобразование.
  2. Численное преобразование.
  3. Преобразование к логическому значению.

Эта глава описывает преобразование только примитивных значений, объекты разбираются далее.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки. Например, его производит функция alert .

var a = true; alert( a ); // "true"

Можно также осуществить преобразование явным вызовом String(val) :

alert( String(null) === "null" ); // true

Как видно из примеров выше, преобразование происходит наиболее очевидным способом, «как есть»: false становится «false» , null – «null» , undefined – «undefined» и т.п.

Также для явного преобразования применяется оператор «+» , у которого один из аргументов строка. В этом случае он приводит к строке и другой аргумент, например:

alert( true + "test" ); // "truetest" alert( "123" + undefined ); // "123undefined"

Численное преобразование

Численное преобразование происходит в математических функциях и выражениях, а также при сравнении данных различных типов (кроме сравнений === , !== ).

Для преобразования к числу в явном виде можно вызвать Number(val) , либо, что короче, поставить перед выражением унарный плюс «+» :

var a = +"123"; // 123 var a = Number("123"); // 123, тот же эффект
Значение Преобразуется в.
undefined NaN
null 0
true / false 1 / 0
Строка Пробельные символы по краям обрезаются.
Далее, если остаётся пустая строка, то 0 , иначе из непустой строки «считывается» число, при ошибке результат NaN .
// после обрезания пробельных символов останется "123" alert( +" \n 123 \n \n" ); // 123
alert( +true ); // 1 alert( +false ); // 0
alert( "\n" == false ); alert( "1" == true );

Специальные значения

Посмотрим на поведение специальных значений более внимательно.

Читайте также:  Java long equals int

Интуитивно, значения null/undefined ассоциируются с нулём, но при преобразованиях ведут себя иначе.

Специальные значения преобразуются к числу так:

Значение Преобразуется в.
undefined NaN
null 0

Это ведёт к забавным последствиям.

Например, null не подчиняется законам математики – он «больше либо равен нулю»: null>=0 , но не больше и не равен:

alert( null >= 0 ); // true, т.к. null преобразуется к 0 alert( null > 0 ); // false (не больше), т.к. null преобразуется к 0 alert( null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.

Значение undefined вообще «несравнимо»:

alert( undefined > 0 ); // false, т.к. undefined -> NaN alert( undefined == 0 ); // false, т.к. это undefined (без преобразования) alert( undefined < 0 ); // false, т.к. undefined ->NaN

Для более очевидной работы кода и во избежание ошибок лучше не давать специальным значениям участвовать в сравнениях > >= <

Используйте в таких случаях переменные-числа или приводите к числу явно.

Логическое преобразование

Преобразование к true/false происходит в логическом контексте, таком как if(value) , и при применении логических операторов.

Все значения, которые интуитивно «пусты», становятся false . Их несколько: 0 , пустая строка, null , undefined и NaN .

Остальное, в том числе и любые объекты – true .

Полная таблица преобразований:

Значение Преобразуется в.
undefined , null false
Числа Все true , кроме 0 , NaN — false .
Строки Все true , кроме пустой строки «» — false
Объекты Всегда true

Для явного преобразования используется двойное логическое отрицание !!value или вызов Boolean(value) .

В отличие от многих языков программирования (например PHP), «0» в JavaScript является true , как и строка из пробелов:

alert( !!"0" ); // true alert( !!" " ); // любые непустые строки, даже из пробелов - true!

Логическое преобразование интересно тем, как оно сочетается с численным.

Два значения могут быть равны, но одно из них в логическом контексте true , другое – false .

Например, равенство в следующем примере верно, так как происходит численное преобразование:

… А в логическом контексте левая часть (0) даст false , правая («\n0\n») – true , так как любая не пустая строка в логическом контексте равна true :

С точки зрения преобразования типов в JavaScript это совершенно нормально. При сравнении с помощью «==» – численное преобразование, а в if – логическое, только и всего.

Итого

В JavaScript есть три преобразования:

  1. Строковое: String(value) – в строковом контексте или при сложении со строкой. Работает очевидным образом.
  2. Численное: Number(value) – в численном контексте, включая унарный плюс +value . Происходит при сравнении разных типов, кроме строгого равенства.
  3. Логическое: Boolean(value) – в логическом контексте, можно также сделать двойным НЕ: !!value .

Точные таблицы преобразований даны выше в этой главе.

Особым случаем является проверка равенства с null и undefined . Они равны друг другу, но не равны чему бы то ни было ещё, этот случай прописан особо в спецификации.

Источник

Оцените статью