【问题标题】:JavaScript Object.assign not working on Date objectJavaScript Object.assign 不适用于 Date 对象
【发布时间】:2017-03-01 22:08:36
【问题描述】:

可以使用此方法克隆常规对象:

a = {x:9}; //sample
b = Object.assign(Object.create(a),a);
console.log(a);
console.log(b);

但是,Date 类型的变量似乎不适用于 Object.assign 和 Object.create:

a = new Date();
b = Object.assign(Object.create(a),a);
console.log(a);
console.log(b);

/*
Results of printing a, b are not the same:
a:
Thu Oct 20 2016 11:17:29 GMT+0700 (SE Asia Standard Time)
b:
Date {}
*/

我知道我可以使用另一种方式创建 Date 对象的克隆

b = new Date(a)

但是为什么 Object.assign 和 Object.create 对 Date 类型不起作用?

【问题讨论】:

  • 您期望发生什么?您希望复制源 Date 对象的哪些属性?
  • 它的所有属性
  • 嗯,它正在复制所有 enumerableown 属性。只是 Date 实例没有。

标签: javascript date object clone assign


【解决方案1】:

Object.assign() 方法复制源对象的 可枚举自己的 属性。 Date 实例实际上并没有任何这些(如果您不使用自己的代码添加任何内容)。

特别是,像年、月、日期等日期“属性”不是 JavaScript 意义上的属性。它们是可以通过 API 检索的值。这并不能使它们成为属性。

【讨论】:

  • hm,JS 很有趣,似乎 Date 类型的实例具有 JS 代码无法访问的“本机”属性
  • @johnlowvale 是的,这完全在本机元素的范围内,尽管纯 JavaScript 代码也可以这样做。对象属性作为对象的属性就在那里,正如您从MDN documentation 中看到的那样,Date 实例上确实没有任何属性。
  • 最好参考ECMA-262。默认 Date 实例有一个内部属性(它们的时间值,可通过 getTime 访问)并且没有自己的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2021-10-18
  • 2021-03-12
  • 1970-01-01
相关资源
最近更新 更多