Object.assign()介绍、用法、原理、用途
发布时间:2025-05-20 08:04:49 发布人:远客网络
一、Object.assign()介绍、用法、原理、用途
1、Object.assign()是ES6中提供的用于浅复制的对象方法。它主要用于合并多个JS对象,实现对象属性的合并。方法的语法为Object.assign(target,...sources),其中target是目标对象,...sources是源对象。在合并过程中,源对象的属性会覆盖目标对象中同名的属性。
2、Object.assign只复制源对象本身的可枚举属性,不会复制继承属性和不可枚举属性。它也会调用源对象的[[Get]]和目标对象的[[Set]],因此它分配属性,而不仅仅是复制或定义新的属性。需要注意的是,如果源对象包含getter,Object.assign可能不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()和Object.defineProperty()。
3、String类型和Symbol类型的属性同样会被拷贝。在错误情况下,例如属性不可写时,会引发TypeError,如果在引发错误之前添加了任何属性,则可以更改target对象。Object.assign不会跳过那些值为 [null]或 [undefined]的源对象。
4、Object.assign的用途广泛,包括:
二、关于Object.assign的性能问题
1、Node.js中的 util._extend API,尽管已被废弃,却依然存在于最新版本的基础库代码中。这并非因社区懈怠,而是因为相比更先进的 Object.assign,它在某些性能上存在优势。
2、社区已就这一问题进行了讨论,但考虑到性能问题,Node.js继续使用 util._extend。实验证明,与 Object.assign相比,util._extend的性能较优,大约快 2-3倍。此差异可通过简单代码对比体现。
3、在 Node.js内部,util._extend通常用于复制参数对象;在日常开发中,Object.assign也常用于合并对象,特别是在基于 React的项目中。虽然两者在大多数情况下功能等同,但在特殊情况下,它们存在差异,导致性能差距。
4、具体而言,util._extend通过循环直接向目标对象写入属性,能复用 hidden class,而 Object.assign则可能引起 V8重建对象,导致性能损耗。这一理论分析得到了其他文章和讨论的支持。
三、js获取历史url
一、JS高手呢,获取历史网址
你的问题涉及到 Same Origin Policy(同源策略),这是一个关系到隐私和安全性的问题。任何浏览器都不会给你机会让你访问**异域**历史网址。
你的问题涉及到 Same Origin Policy(同源策略),这是一个关系到隐私和安全性的问题。任何浏览器都不会给你机会让你访问**异域**历史网址。
但是,如果这三个页面在同一域名下,你可以使用 Javascript的 document.cookie来记录每次访问的网址。
我写的例子需要4个文件,url_history.js,1.,2.,3.(三个文件内容相同),代码写在空间(hi.baidu/keneks/item/50699e21f9300d0c72863e4d)
复制粘贴,将 url_history.js和其它三个文件放在一起,访问任何一个页面,点击任何链接,上面会自动显示曾经访问过的页面。
历史网址以 array形式保存在 url_history变量中,所以 url_history[0]为上一个,url_history[1]为上上一个,以此类推。
<script> var backurl=document.referrer; alert(backurl);</script>;但是有的浏览器不支持的,如果是同个域名下通过此方式跳转的,那么我们可以通过访问windoww.opener对象去获取丢失的referrer信息。
代码如下:<script type=text/javascript> var referrer= document.referrer; if(!referrer){ try{ if(window.opener){// IE下如果跨域则抛出权限异常// Safari和Chrome下window.opener.location没有任何属性 referrer= window.opener.location.href;}} catch(e){}}</script>;你的q号,我一会远程助你。
使用js对当前的URL进行操作,可以使用内置对象window.location;window.location有以下属性:window.location.href:取得当前地址栏中的完整URL,可以通过赋值改变当前地址栏中的URL;window.location.search取得当前URL的参数部分,即“?”后面的部分(包括问号),可以通过赋值改变URL的参数部分;window.location.hash:取得当前URL中包含的锚记,即“#”后面的部分(包括#),可以通过赋值改变URL的锚记部分;window.location.host:取得当前URL中的主机信息,包括端口号,可以通过赋值改变主机信息;window.location.hostname:取得当前URL中的域名部分,不包括端口号,可以通过赋值改变域名;window.location.port:取得当前URL中的端口号,可以通过赋值改变端口号;window.location.pathname:取得当前URL中的路径信息,即域名与参数之间的部分,可以通过赋值改变当前URL的路径;window.location.protocol:取得当前URL的协议部分,比如:,:等,可以通过赋值改变URL的协议部分;window.location有一下方法:window.location.replace(url):用传入的URL字符串替代当前的URL,该方法会将历史记录中的URL一并替换掉,也就是说,这个方法会覆盖之前的历史记录;window.location.reload():重新加载当前URL,相当于刷新;window.location.assign(url):加载传入的URL,该方法不会覆盖之前的历史记录;。
下面为使用JS获取MAC地址、IP地址及主机名的方法:复制代码代码如下:<meta-equiv="Content-Type" content="text/; charset=gbk"><body>。
1、设置或获取整个 URL为字符串: window.location.href
2、设置或获取与 URL关联的端口号码: window.location.port
3、设置或获取 URL的协议部分 window.location.protocol
4、设置或获取 href属性中跟在问号后面的部分 window.location.search
5、获取变量的值(截取等号后面的部分)
6、设置或获取 URL的协议部分: window.location.protocol
7、设置或获取 href属性中在井号“#”后面的分段: window.location.hash
8、设置或获取 location或 URL的 hostname和 port号码: window.location.host
使用js对当前的URL进行操作,可以使用内置对象window.location;
window.location.href:取得当前地址栏中的完整URL,可以通过赋值改变当前地址栏中的URL;
window.location.search取得当前URL的参数部分,即“?”后面的部分(包括问号),可以通过赋值改变URL的参数部分;
window.location.hash:取得当前URL中包含的锚记,即“#”后面的部分(包括#),可以通过赋值改变URL的锚记部分;
window.location.host:取得当前URL中的主机信息,包括端口号,可以通过赋值改变主机信息;
window.location.hostname:取得当前URL中的域名部分,不包括端口号,可以通过赋值改变域名;
window.location.port:取得当前URL中的端口号,可以通过赋值改变端口号;
window.location.pathname:取得当前URL中的路径信息,即域名与参数之间的部分,可以通过赋值改变当前URL的路径;
window.location.protocol:取得当前URL的协议部分,比如:,:等,可以通过赋值改变URL的协议部分;
window.location.replace(url):用传入的URL字符串替代当前的URL,该方法会将历史记录中的URL一并替换掉,也就是说,这个方法会覆盖之前的历史记录;
window.location.reload():重新加载当前URL,相当于刷新;
window.location.assign(url):加载传入的URL,该方法不会覆盖之前的历史记录;