Man*_*jSS 4 html javascript jquery date variable-assignment
当我试图了解setDate()的功能时,javscript日期的setTime()我遇到了这个问题.
<script>
var date1 = new Date();
var date2 = new Date(1991,4,11);
var date3 = new Date(1992,4,11);
date3 = date1;
date2 = date1;
date2.setDate(date2 .getDate() + 40);//im changing only date2 value using setDate()
//print values
</script>
Run Code Online (Sandbox Code Playgroud)
我认为结果将是:
2014
年
7月4日星期五2014年8月13日星期三2014年7月4日星期五
但在输出中,所有日期变量都具有相同的值:
2014年8月13日星期三
2014年8月13日星期三
2014年8月13日星期三
如果我使用整数变量执行类似的代码,它们就像我想的那样工作(所有int变量都有不同的值).
问题摘要
提前致谢.
Tip*_*-Sy 14
您需要复制日期,如下所示:
date3 = new Date(date1.getTime());
date2 = new Date(date1.getTime());
Run Code Online (Sandbox Code Playgroud)
或者干脆:
date3 = new Date(date1);
date2 = new Date(date1);
Run Code Online (Sandbox Code Playgroud)
代替
date3 = date1;
date2 = date1;
Run Code Online (Sandbox Code Playgroud)
否则,您的变量都指向相同的Date对象(最初引用date1).
编辑(关于内存分配)
var date1 = new Date(); // Memory allocation for an object
var date2 = new Date(1991,4,11); // Memory allocation n°2
var date3; // Obviously no memory allocation here
date3 = date1; // No memory allocation either, date2 and date3
date2 = date1; // become references of the object in date1
Run Code Online (Sandbox Code Playgroud)
在此示例中,有两个内存分配,但只有一个是有用的,因为未使用date2中的对象.
注意:最初在date2中的对象仍然存在,但不再被引用(它将被垃圾收集).
var date1 = new Date(); // Memory allocation for an object
var date2 = new Date(date1); // Memory allocation n°2
var date3 = new Date(date1); // Memory allocation n°3
Run Code Online (Sandbox Code Playgroud)
在此示例中,有3个不同对象的三个内存分配.第二和第三个分配包括创建新的Date对象,其中包含date1中对象的副本.
我希望这个小解释更清楚.如果您对JavaScript中的内存管理感兴趣,我建议您看一下:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management