sto cercando di capire questo comportamento:Perché l'aggiunta Data genera una stringa?
var d = new Date();
console.log(+d); // 1458049171381
console.log(1 + d); // '1Tue Mar 15 2016 09:39:31 GMT-0400 (EDT)'
In contrasto:
var obj = {
valueOf: function() {
return 123;
}
};
console.log(+obj); // 123
console.log(1 + obj); // 124
Perché il risultato Date
aggiunta in un string
quando Date.prototype.valueOf
restituisce un number
?
Ecco traduzione ingenua del Addition Operator's spec a JavaScript
function ToPrimitive(x) {
return x.valueOf();
}
function IsString(x) {
return typeof x === 'string';
}
function ToString(x) {
return x.toString();
}
function ToNumber(x) {
try {
return parseFloat(x);
} catch (e) {
return NaN;
}
}
function AdditionOperator(lval, rval) {
let lprim = ToPrimitive(lval);
let rprim = ToPrimitive(rval);
if (IsString(lprim) || IsString(rprim)) {
return ToString(lprim) + ToString(rprim);
} else {
return ToNumber(lprim) + ToNumber(rprim);
}
}
Tuttavia, se invoco questo con un oggetto Date
, restituisce un valore numerico:
AdditionOperator(new Date(), 1) // 1458049347088
Qualcuno può far luce su Questo?
hai letto la NOTA 1? – Hacketo
@Hacketo/facepalm ... Accetterò la tua risposta se ne pubblichi uno. –
@iliacholy ya ero sbagliato.è stato un equivoco. Grazie per l'esempio. –