意外的 Javascript Date 对象隐式转换
Unexpected Javascript Date object implicit conversion
为什么Javascript的Date对象为隐式转换返回不同的值?
号码转换:
+new Date()
// returns 1456293356618 as expected
字符串转换:
''+new Date()
// returns "Wed Feb 24 2016 09:26:28 GMT+0" but "1456293356618" as a string was expected
我在哪里可以找到 ECMAScript 的文档和 v8 源代码上的实现?
编辑:我不是在为预期结果寻找解决方案。我想在规格中找到文档。
+
运算符重载。在:
+new Date()
它被视为一元 + 运算符,并将值强制为 Number。在:
'' + new Date() // note one value is a string
它被视为字符串串联运算符,并将值强制转换为 String。在:
5 + 6 // note both values are number
它被视为加法运算符。由于值是数字,因此不需要强制。
请注意,+
加法还是串联取决于值,在 ECMAScript 2015 §12.7.3.1 步骤 11 中有描述。
我认为您指的是日期对象概述和抽象运算符的定义,特别是第 20.3.1.1 节
Date 对象包含一个数字,指示在一毫秒内的特定时刻。这样的数字称为时间值。时间值也可以是 NaN,指示 Date 对象不表示特定的时刻。
这意味着对 Date 对象使用数学运算将提取其 Number 值以使其工作。这就是为什么像 +new Date()
和 Math.floor(new Date())
这样的语句会返回一个数字。
至于'' + new Date()
,Date 对象可能使用其 toString()
函数返回其字符串值。
相关文章:
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 在Javascript中转换对象数组
- 如何将TypeScript对象转换为普通对象
- JavaScript代码问题:我正在将对象转换为数组
- Javascript如何转换对象数组
- 任何转换对象*值*的Javascript或Coffeescript“映射”函数
- 转换对象数组
- 转换对象或数组值的最佳方式
- 使用lodash转换对象的键和值的最优雅的方法是什么?
- Javascript/html5 2d Canvas Context -获取相对于Canvas的X, Y(相对于转换对象
- javascript,转换或强制转换对象
- 根据对象的不同,在转换对象时考虑旋转
- 在类中转换对象
- 转换对象数组的结构
- 用于在浏览器中转换对象(拖动、缩放、旋转和扭曲)的Javascript框架
- Javascript:通过lodash、下划线或corejavascript转换对象响应数组
- 如何转换对象数组
- 使用Lodash转换对象数组