Несколько вариантов использования toString()

JavaScript
Несколько вариантов использования toString()

Веб-статья была впервые опубликована в общедоступной учетной записи WeChat двух программистов.Я надеюсь общаться с вами больше и вместе добиваться прогресса~

Прежде чем говорить о нескольких вариантах использования toString(), давайте поговорим о разнице между string() и toString():

1. И String(), и toString() могут быть преобразованы в строковые типы, но toString() не может преобразовать null и undefined, потому что null и undefined не имеют своих собственных объектов-оболочек и не могут получить доступ к методу toString() объекта,Ссылка на свойство объекта-оболочки заканчивается, и вновь созданный временный объект будет уничтожен.

Так рождается вопрос лица:

var s = 'test';
s.len = 4;
var t = s.len;
//试问 t输出什么 

Строка не является объектом, так как же она может ссылаться на методы объекта?

Это связано с тем, что строка имеет соответствующий тип оболочки, который может преобразовать строку в объект.Этот объект можно использовать для обработки ссылки на свойство.После окончания ссылки вновь созданный объект будет уничтожен. Когда var t = s.len запускается снова, новый объект создается путем повторной упаковки объекта, но новому объекту не присваивается значение len, поэтому вывод вышеуказанного вопроса не определен.

Что, если вы добавите свойство к ссылочному типу?

var a = []
a.len = 4
console.log(a.len) // 还是4

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

Кровавый случай, вызванный toString(): В проекте я полностью доверяю данным, возвращаемым сервером, и вызываю метод toString(), который заставляет страницу сообщать об ошибке, woo woo woo~ Друзья, вы должны быть осторожны при написании кода.

Использование toString():

  1. Может преобразовать основание числа (2-36 основание)
var a = 10;
a.toString(2) // "1010"
a.toString(8) // "12"
a.toString(16) // "a"

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

Math.random().toString(36).substring(3,7) //生成四位数的随机验证码
  1. Определить тип данных (базовые данные и справочные данные)
Object.prototype.toString.call(Array) // "[object Function]"
Object.proptotype.toString.call([]) // "[object Array]"

Потому что если мы хотим получить реальный встроенный тип объекта, нам нужно получить значение свойства объекта [[Class]].До es5 значение свойства может быть доступно только Object.prototype.toString, поэтому , через Object .prototype.toString.call(arr) изменяет указатель this метода tostring для получения встроенного типа объекта.

[[Class]]这个内部属性是引擎内部用来判断一个对象是属于哪种类型的值。
所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]]

При использовании toString() для обычных функций будет получено содержимое этой функции, а при использовании toString для встроенных функций будет возвращена строка «[собственный код]».

function test(){
    alert(1);//test
}
test.toString();
/*"function test(){
    alert(1);//test
}"*/
Function.toString();//"function Function() { [native code] }"

Кстати, поговорим о typeof и instanceof

  1. тип:

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

Тип двух форм:

 typeof(表达式)
 typeof 变量名
 //返回值:string, number, boolean, undefined, object( null 也返回object), function, symbol

Например:

typeof NaN // number

typeof Symbol(1) // "symbol"
  1. A instanceof B:

[объект] instanceof [конструктор]

Принцип: Экземпляр A не находится в конструкторе B

A слева должен быть объектом, если это данные базового типа, он вернет false напрямую

Для сложных типов данных:

let reg = new RegExp(//)
reg instanceof RegExp // true
reg instanceof Object // true

let date = new Date()
date instanceof Date // true
date instanceof Object // true

так что используйтеObject.prototype.toString.call(xxx)Тип возвращаемых данных является наиболее надежным, а возвращаемое значение представляет собой строковое представление объекта [тип данных объекта].

Чего вы ждете? Используйте надежный Object.prototype.toString.call(xxx) прямо сейчас.