function firstDayInPreviousMonth(yourDate) {
var d = new Date(yourDate);
d.setDate(1);
d.setMonth(d.getMonth() - 1);
return d;
}
РЕДАКТИРОВАТЬ: Хорошо ... Я определенно кое-что узнал здесь. Я думаю, что это самое простое решение, которое охватывает все случаи (и да, оно работает на январь):
function firstDayInPreviousMonth(yourDate) {
return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1);
}
Это называется Глубокая копия . Вы можете найти примеры в:
Easier way:
var a = {'foo': []};
var b = a;
a['foo'].push(1);
console.log(b);
Output is the same.
Edit:
var a = {'foo': []};
var b = {};
for (var key in a) {
if (a.hasOwnProperty(key)) {
b[key] = [];
for (var i = 0; i < a[key].length; i += 1) {
b[key][i] = a[key][i];
}
}
}
a['foo'].push(1);
console.log(b);
Вы можете создать функцию « clone », которая создает новый объект на основе исходного объекта конструктор , а затем клонируйте эти исходные свойства объекта, также если они являются объектами:
function clone(obj){
if(typeof(obj) != 'object' && obj != null)
return obj; // return the value itself if isn't an object
// or null, since typeof null == 'object';
var temp = new obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
var a = {'foo': []};
var b = clone(a);
a['foo'].push(1);
console.log(b); // Object foo=[0]
As this will add support for deep-copying arrays in your code:
var a = {'foo': []};
var b = {};
for (var key in a) {
if (Object.prototype.toString.call(b[key]) === "[object Array]") {
b[key] = a[key].slice(0);
} else {
b[key] = a[key];
}
}
a['foo'].push(1);
console.log(b);