Во время процесса написания программы JavaScript JS автоматически преобразует объект в номер или строку, а затем обрабатывает его в соответствии с различными контекстами. Правила для этого автоматического преобразования следующие:
Правило для автоматического преобразования объекта в строку:
1. Если объект принадлежит к классу переопределяет метод toString (), метод вызывается. Если результат возврата вызова ToString () является примитивным (строка, число, логическое, неопределенное, нулевое), примитивное значение преобразуется в строку и возвращается.
2. Если метод toString () не переопределен классом toString (), результат возврата вызова toString () «[объект объекта]»; или метод toString () переопределен, но метод возвращает результат в качестве объекта. Затем JS вызовет метод объекта (). Если результат возврата значения вызова () является примитивным (строка, номер, логический, неопределенный, нулевой), то преобразуйте примитивное значение в строку и возврат.
3. Если ни одна из вышеперечисленных точек не соблюдается, и примитивное значение не может быть получено, вызывая метод ToString () или значение () или значение (), то JS будет выбросить ошибку TypeError.
Правило для автоматического преобразования объекта в число:
1. Вызовите метод значения () объекта. Если примитивное значение получено, преобразуйте примитивное значение в число и верните его.
2. Если примитивное значение не может быть получено из метода значения (), то вызовите метод ToString () объекта; Если ToString () возвращает примитивное значение, то преобразуйте примитивное значение в число и возврат.
3. Если ни один из вышеупомянутых двух точек не может быть соблюден, JS вынесет ошибку TypeError.
Можно видеть, что правила автоматического преобразования объекта в строку и объект в число на самом деле одинаковы. Разница - это порядок метода Call ToString () и метод значения ().
Согласно вышеуказанным правилам, некоторые результаты конверсии могут быть хорошо изучены:
1. Для пустых массивов при преобразовании их в число результат - 0. Это потому, что в первую очередь будет вызовен метод значения () () массива (). Поскольку valueof () возвращает сам объект массива, JS затем вызовет метод ToString () пустого массива; Поскольку результат пустого массива toString () возвращается к пустой строке, пустая строка в конечном итоге будет преобразована в число 0 и возвращена.
2. Для массива только с одним номером примените то же правило, чтобы преобразовать его в число, и конечным результатом является номер.
3. Для массивов с несколькими числовыми элементами, поскольку строка не может быть преобразована в число, конечным результатом является NAN.
Когда преобразовать в строку? Когда преобразовать в номер?
При выполнении автоматического преобразования типа на объекте JS решит конвертировать его в строку или номер в зависимости от типа объекта и оператора. Конкретные правила следующие:
1. Если объект появляется с обеих сторон оператора +, преобразуйте объект в строку.
2. Все объекты (кроме объектов даты) будут сначала преобразованы в номер.
3. Для объектов даты приоритет преобразуется в строку.
Стоит отметить, что для оператора +, за исключением случая, когда объекты или строки появляются с обеих сторон оператора, в других случаях выполняется операция «преобразовать в число». В то же время эта операция также связана с порядком между значениями.
эксперимент
Кода -копия выглядит следующим образом:
Console.log (3 * []); // 0
Консоль.log (3 * [2]); // 6
Console.log (3 * [1,2]); // nan
Console.log (3 + [2]); // 32
var теперь = new Date ();
Console.log (сейчас + 1); // Ср 26 марта 2014 г. 10:51:39 GMT + 0800 (CST) 1
Console.log (теперь - 1); // 1395802299223
Console.log (теперь * 2); // 2791604598448
console.log (true + true); // 2
Console.log (2 + null); // 2, NULL преобразуется в 0
Console.log (2 + не определен); // nan, не определяется в NAN
Console.log (1 + 2 + "cats"); // 3 кошки
Console.log (1 + (2 + "кошки")); // 12 кошек