Tôi đang cố gắng để hiểu hành vi này:Tại sao kết quả Ngày thêm vào một chuỗi?
var d = new Date();
console.log(+d); // 1458049171381
console.log(1 + d); // '1Tue Mar 15 2016 09:39:31 GMT-0400 (EDT)'
Ngược lại với:
var obj = {
valueOf: function() {
return 123;
}
};
console.log(+obj); // 123
console.log(1 + obj); // 124
Tại sao kết quả Date
Ngoài ra trong một string
khi Date.prototype.valueOf
trả về một number
?
Dưới đây là bản dịch ngây thơ của Addition Operator's spec 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);
}
}
Tuy nhiên, nếu tôi gọi này với một đối tượng Date
, nó sẽ trả về một giá trị số:
AdditionOperator(new Date(), 1) // 1458049347088
Ai đó có thể làm sáng tỏ về điều này?
bạn đã đọc CHÚ THÍCH 1 chưa? – Hacketo
@ Hacketo/facepalm ... Tôi sẽ chấp nhận câu trả lời của bạn nếu bạn đăng bài. –
@iliacholy ya i đã sai. Đó là một quan niệm sai lầm. Cảm ơn ví dụ. –