为什么Object.assign不复制URL对象的属性?

时间:2018-01-12 18:32:09

标签: javascript

在macOS 10.13.1 上使用 Chrome 63

我使用Object.assignnew URL()作为源对象,但它总是提供一个空对象?这似乎是一种奇怪的行为。这是我的代码:

 let url = new URL('http://www.yahoo.com');
 console.log(url);
 let data = Object.assign({}, url);
 console.log(data);

为什么数据是空对象,而url具有完整的URL对象,如下所示:

{
 href: "http://www.yahoo.com/", 
 origin: "http://www.yahoo.com", 
 protocol: "http:", 
 username: "", 
 password: ""
 ...
}

我也尝试过:

let data = Object.assign({}, ...url);  

但它给出了:

  

未捕获的TypeError:undefined不是函数

2 个答案:

答案 0 :(得分:5)

我怀疑是因为URL的属性不是enumerable。注意当你Object.keys(url)时你也得到一个空白数组? Object.assignObject.keys都可以使用enumerable属性。

url对象上的属性不是enumerable.

答案 1 :(得分:2)

您可以简单地克隆网址:

 let url = new URL('http://www.yahoo.com');
 console.log(url);
 let data = new URL(url);
 console.log(data);

网址语法:

url = new URL(url, [base])
  

您仍然可以使用现有的URL对象作为基础   将自身字符串化为对象的href属性。