按数字和字符串设置新的 Date() 会给出不同的结果
Setting new Date() by number and string gives different result
我正在学习JavaScript,我发现了JavaScript的奇怪(?)行为。
我通过以下方式创建日期对象
var stack = new Date(1404187200000) // 07-01-2014
var overflow = new Date('07-01-2014')
当我比较这两个日期对象时
stack == overflow // returns false
stack.getTime() == overflow.getTime() // returns true
我相信这是因为它们不是同一个对象。 但我知道"=="是平等的比较,"==="是身份的比较——就像这个例子:
var stack = 1;
var overflow = '1';
stack == overflow // returns true
stack === overflow // returns false
那么,为什么比较新的日期([NUMBER])和新的日期([字符串])会给出不同的结果,即使它们是相同的日期?
请开导我!
你误解了==
和===
之间的区别。并不是说一个人做平等检查,一个人做参考检查。
对于===
,两个操作数必须具有相同的类型。但对于==
,在检查相等性之前允许类型强制。
在您的情况下,这两个对象属于同一类型,因此==
和===
之间没有区别;但它们检查的是引用相等性,而不是值。检查值与日期相等的正确方法是:检查是否stack.getTime() == overflow.getTime()
.
你也可以做+stack == +overflow
,这将首先强制转换它们,然后你会得到一个值相等性测试。
new Date
返回一个对象。 每次创建它时,它都会创建一个不同的对象,因此它们不相等。 getTime
从对象返回一个值(属性) - 对于两个对象,这将相同。
这有点复杂。 ===
在尝试转换为通用类型时检查==
类型。这就是为什么1 == '1'
为真,1 === '1'
为假,因为在第一种情况下,"1"被转换为数字(AFAIR)。
您可以在此处查看如何处理的确切规范: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 - 在这种情况下,对您来说有趣的部分是 1. f。
如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- 昨天,我的Date.now()溢出了,我在Google上找不到任何相关结果
- 使用Mysql UNIX_TIMESTAMP()与JAVASCRIPT Date.UTC()获得不同的结果
- ASP.NET 从 ajax 调用到 javascript date 解析 DateTime 结果
- 按数字和字符串设置新的 Date() 会给出不同的结果
- 来自String的Javascript新Date对象,IE和FF上的不同结果
- 在机器时间更改后立即更新Date()函数结果
- 在执行getTime()时,Javascript new Date()给了我相同的结果
- 为什么移动safari似乎给出了与桌面浏览器不同的Javascript Date()结果
- MongoDB ISODate()给出的结果与Date()不同
- 为什么不同的浏览器对JavaScript new Date(-105998400000)返回不同的结果?
- 尝试使用new date()解析日期.但总是得到错误的结果
- JavaScript new Date(string)对完全相同的日期字符串返回不同的结果
- Regex for date的计算结果为true,即使字符错误
- 无法使用javascript中的Date()方法获得预期结果
- JS Date()需要错误的数据来返回正确的结果
- 传递给date构造函数的Javascript日期字符串给出了奇怪的结果
- Node.js/Javascript Date()命令在第一次调用后返回乱码结果
- javascript date getYear()在IE和Firefox之间返回不同的结果,如何解决这个问题?