我们在代码中找到了下一行(是的,你可以问为什么它甚至存在,但它确实存在):
console.log(new Date(2015, 10, 9).toString() > new Date(2015, 9, 10).toString())
// Returns false
console.log(new Date(2015, 5, 9).toString() > new Date(2015, 4, 10).toString())
// Returns true
我们不明白它是如何运作的,所以希望有人可以解释。
答案 0 :(得分:3)
toString以下列格式返回日期的字符串表示
new Date(2015, 10, 9).toString();
“Mon Nov 09 2015 00:00:00 GMT + 0530(印度标准时间)”
第一行
console.log(new Date(2015, 10, 9).toString() > new Date(2015, 9, 10).toString())
是false
,因为M > S
为假
第二行
console.log(new Date(2015, 5, 9).toString() > new Date(2015, 4, 10).toString())
是true
,因为T > M
为真
答案 1 :(得分:1)
我在节点上做了这个,看输出,应该是自解释
> console.log(new Date(2015, 10, 9).toString())
Mon Nov 09 2015 00:00:00 GMT+0800 (+08)
> console.log( new Date(2015, 4, 10).toString())
Sun May 10 2015 00:00:00 GMT+0800 (+08)
> console.log(new Date(2015, 5, 9).toString())
Tue Jun 09 2015 00:00:00 GMT+0800 (+08)
> console.log(new Date(2015, 4, 10).toString())
Sun May 10 2015 00:00:00 GMT+0800 (+08)
答案 2 :(得分:1)
基本上,上述表达式评估为:
console.log("Mon Nov 09 2015 00:00:00 GMT+0100 (CET)" > "Sat Oct 10 2015 00:00:00 GMT+0200 (CEST)");
//false
console.log("Tue Jun 09 2015 00:00:00 GMT+0200 (CEST)" > "Sun May 10 2015 00:00:00 GMT+0200 (CEST)");
//true
现在,为什么? JavaScript会比较字符串Lexicographically。
意味着每个字符串的首字母首先按字母顺序进行比较。
第一个表达:S
稍后会出现在字母表中。因此它大于M
。
第二个表达:T
稍后会出现在字母表中。因此它大于S
。
答案 3 :(得分:0)
我不太喜欢字符串操作,但对于第一种情况......
new Date(2015, 10, 9).toString()
以字符串形式给出日期,具体取决于您所在的地区,在我的情况下,它是
Mon Nov 09 2015 00:00:00 GMT+0500 (Pakistan Standard Time)
和new Date(2015, 9, 10).toString()
我得到"Sat Oct 10 2015 00:00:00 GMT+0500 (Pakistan Standard Time)"
现在,当两个字符串之间进行比较时,在这种情况下它是> ,javascript引擎比较两个字符串的第一个字符,按字母顺序 M 在 S 之前,因此第一个console.log提供 false ,因为 M 不大于 S 。
类似的解释是第二种情况,其中 T 字符位于 S 之后,因此 T 大于 S 是 true 。