В результате вы сначала создаете новый объект Date, а затем приводите его к числу.
TL; DR-версия
Под капотом среда выполнения вызывает valueOf
метод объекта Date
.
Многословный-версия
вернуть новый Date
объект
var d = new Date;
используйте Unary + Operator
var n = +d;
Унарный оператор + вызывает внутренний ToNumber с d
.
9,3 ToNumber
Принимает аргумент input и, если тип аргумента равен Object
(Date is), вызовите внутренний ToPrimitive с input и номер подсказки .
9,1 ToPrimitive
принимает аргумент input и необязательный аргумент PreferredType .
если тип ввода это объект, который спецификация говорит:
Возвращает значение по умолчанию для объекта. Значение по умолчанию для объекта
извлекается путем вызова внутреннего метода [[DefaultValue]]
объект, передавая необязательную подсказку PreferredType . Поведение
[[DefaultValue]] внутренний метод определяется этой спецификацией для
все собственные объекты ECMAScript в 8.12.8.
8.12.8 [[DefaultValue]] (подсказка)
Когда внутренний метод [[DefaultValue]] для O вызывается с подсказкой
Номер, предпринимаются следующие шаги:
- Пусть valueOf будет результатом вызова внутреннего метода [[Get]] объекта O с аргументом "valueOf".
- Если IsCallable (valueOf) равен true, тогда
- Пусть val будет результатом вызова внутреннего метода [[Call]] для valueOf с O в качестве значения this и пустым списком аргументов.
- Если val является примитивным значением, вернуть val.
В коде это примерно переводится как:
var val,
type,
valueOf = O.Get( 'valueOf' );
if ( typeof valueOf === 'function' ) {
val = valueOf.call( O );
type = typeof val;
if ( val == null || type === 'boolean' || type === 'number' || type === 'string' ) {
return val;
}
}
[[Get]]
указание внутреннего метода O с аргументом "valueOf" в основном означает возвращение Date.prototype.valueOf .
15.9.5.8 Date.prototype.valueOf ()
Функция valueOf
возвращает число, которое это значение времени .
Если мы теперь вернемся к 9.3 ToNumber , мы увидим, что ToNumber вызывает себя, на этот раз с возвращенным val
из 8.12.8 [[DefaultValue]] (подсказка) как primValue
. Если тип аргумента равен Number, он говорит:
Результат равен входному аргументу (без преобразования).
Конец