当前位置: 首页 > news >正文

企业网站建设定制开发seo是什么职位的简称

企业网站建设定制开发,seo是什么职位的简称,手机网站设计公司哪家好,怎么样做网站代你是否知道,JavaScript中有一种原生的方法来做对象的深拷贝? 本文我们要介绍的是 structuredClone 函数,它是内置在 JavaScript 运行时中的: const calendarEvent {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve…

你是否知道,JavaScript中有一种原生的方法来做对象的深拷贝?

本文我们要介绍的是 structuredClone 函数,它是内置在 JavaScript 运行时中的:

const calendarEvent = {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve"]
}const copied = structuredClone(calendarEvent)

在上面的示例中,我们不仅拷贝了对象,还拷贝了嵌套数组,甚至拷贝了Date对象:

copied.attendees // ["Steve"]
copied.date // Date: Wed Dec 31 1969 16:00:00
cocalendarEvent.attendees === copied.attendees // false

没错,structuredClone不仅可以做到以上这些,而且还可以:

  • 克隆无限嵌套的对象和数组
  • 克隆循环引用
  • 克隆各种各样的JavaScript类型,如Date, Set, Map, Error, RegExp, ArrayBuffer, Blob, File, ImageData等等
  • 转移任何可转移的对象

举个例子:

const kitchenSink = {set: new Set([1, 3, 3]),map: new Map([[1, 2]]),regex: /foo/,deep: { array: [ new File(someBlobData, 'file.txt') ] },error: new Error('Hello!')
}
kitchenSink.circular = kitchenSink// 以上都会被克隆
const clonedSink = structuredClone(kitchenSink)

为什么不使用对象扩展运算符进行克隆呢

值得注意的是,我们讨论的是深拷贝。如果你只需要做一个浅拷贝,也就是一个不复制嵌套对象或数组的拷贝,那么我们可以只做一个对象扩展:

const simpleEvent = {title: "前端修罗场",
}
const shallowCopy = {...calendarEvent}

或者你也可以使用这种方法:

const shallowCopy = Object.assign({}, simpleEvent)
const shallowCopy = Object.create(simpleEvent)

但是一旦我们有了嵌套项,我们就会遇到麻烦:

const calendarEvent = {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve"]
}const shallowCopy = {...calendarEvent}shallowCopy.attendees.push("Bob")
shallowCopy.date.setTime(456)

如上所见,我们没有对该对象进行完整复制。

嵌套日期和数组仍然是两者之间的共享引用,如果我们想编辑它们,认为我们只是更新复制的日历事件对象,这可能会导致重大问题。

为什么不使用JSON.parse(JSON.stringify(x)) ?

它实际上是一个很棒的工具,性能令人惊讶,但也有一些structuredClone可以解决的缺点。

举个例子:

const calendarEvent = {title: "前端修罗场",date: new Date(123),attendees: ["Steve"]
}const problematicCopy = JSON.parse(JSON.stringify(calendarEvent))

如果我们输出 problematicopy,我们会得到:

{title: "前端修罗场",date: "1970-01-01T00:00:00.123Z"attendees: ["Steve"]
}

这不是我们想要的 date 格式,因为格式应该是date对象,而不是字符串。

这是因为 JSON.Stringify 只能处理基本对象、数组和基本类型。任何其他类型都可能以难以预测的方式处理。例如,日期被转换为字符串。但是 Set 对象就会被简单地转换为 {}。

同时,JSON.Stringify 甚至会完全忽略某些东西,如 undefined 或 function。

例如,如果我们用这个方法复制下面这个例子:

const kitchenSink = {set: new Set([1, 3, 3]),map: new Map([[1, 2]]),regex: /foo/,deep: { array: [ new File(someBlobData, 'file.txt') ] },error: new Error('Hello!')
}const veryProblematicCopy = JSON.parse(JSON.stringify(kitchenSink))

输出之后,得到的是这样:

{"set": {},"map": {},"regex": {},"deep": {"array": [{}]},"error": {},
}

可以看到, 这种方法的拷贝出错了。

因此,如果我们的需求适合这个方法,可以用这个方法。但是,我们可以用 structuredClone 做这个方法有很多不能做的事情。

为什么不是 _.cloneDeep?

到目前为止,Lodash 的 cloneDeep 函数是这个问题的一个非常常见的解决方案。事实上,这确实也像预期的那样工作:

import cloneDeep from 'lodash/cloneDeep'const calendarEvent = {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve"]
}// ✅ 
const clonedEvent = structuredClone(calendarEvent)

但是,这里有一个警告。根据我的 IDE 中的导入成本扩展,打印任何我导入函数的成本,这个函数占了 17.4kb` 的大小(5.3kb gzip):

在这里插入图片描述
假设你只导入了这个函数。如果改用更常见的方式导入,没有意识到摇树并不总是按希望的方式工作,那么可能会无意中为这个函数导入高达2 5kb 的文件😱

在这里插入图片描述

什么是 structuredClone 克隆不了的

函数不能被克隆

structuredClone({ fn: () => { } }) // 会抛出一个 DataCloneError 异常

DOM 节点不能克隆

structuredClone({ el: document.body })// 会抛出一个 DataCloneError 异常

属性描述符 setter和getter 不能克隆

类似元数据的特性也不会被克隆。

例如,使用 getter,结果值会被克隆,但不会克隆 getter 函数本身(或任何其他属性元数据):

structuredClone({ get foo() { return 'bar' } })
// log: { foo: 'bar' }

对象属性不能被克隆

原型链不会被遍历或复制。因此,如果克隆MyClass的一个实例,克隆的对象将不再是该类的实例(但该类的所有有效属性将被克隆)

class MyClass { foo = 'bar' myMethod() { /* ... */ }
}
const myClass = new MyClass()const cloned = structuredClone(myClass)
// log: { foo: 'bar' }cloned instanceof myClass // false

structuredClone 支持类型的完整列表

更简单地说,任何不在下面列表中的东西都不能克隆:

  • JS 内置类型:Array, ArrayBuffer, Boolean, DataView, Date, Error types (those specifically listed below), Map , Object but only plain objects (e.g. from object literals), Primitive types, except symbol (aka number, string, null, undefined, boolean, BigInt), RegExp, Set, TypedArray

  • Error types: Error, EvalError, RangeError, ReferenceError , SyntaxError, TypeError, URIError

  • Web/API types: AudioData, Blob, CryptoKey, DOMException, DOMMatrix, DOMMatrixReadOnly, DOMPoint, DomQuad, DomRect, File, FileList, FileSystemDirectoryHandle, FileSystemFileHandle, FileSystemHandle, ImageBitmap, ImageData, RTCCertificate, VideoFrame

浏览器支持

所有主流浏览器都支持 structuredClone,甚至Node.js和Deno。

不过在 Web worker 中,目前支持是比较有限的。

在这里插入图片描述


文章转载自:
http://wanjiapizazzy.przc.cn
http://wanjiasphragistics.przc.cn
http://wanjiahermaphrodite.przc.cn
http://wanjiahairlike.przc.cn
http://wanjiacrinkly.przc.cn
http://wanjiarhodora.przc.cn
http://wanjiaelastivity.przc.cn
http://wanjiacetaceous.przc.cn
http://wanjiaupblaze.przc.cn
http://wanjiadibber.przc.cn
http://wanjiaunuseful.przc.cn
http://wanjiaweatherstrip.przc.cn
http://wanjiasurveyor.przc.cn
http://wanjiadichasially.przc.cn
http://wanjiajungle.przc.cn
http://wanjiairreproachability.przc.cn
http://wanjiahooch.przc.cn
http://wanjiaprivatism.przc.cn
http://wanjiafaintingly.przc.cn
http://wanjiahitchhiker.przc.cn
http://wanjiastoreroom.przc.cn
http://wanjiachackle.przc.cn
http://wanjiatenacious.przc.cn
http://wanjiasubsumption.przc.cn
http://wanjiateniafuge.przc.cn
http://wanjiapolestar.przc.cn
http://wanjiashttp.przc.cn
http://wanjiabulldyker.przc.cn
http://wanjiaversitron.przc.cn
http://wanjiarotenone.przc.cn
http://wanjiaisle.przc.cn
http://wanjiamanitu.przc.cn
http://wanjiastaylace.przc.cn
http://wanjiaharsh.przc.cn
http://wanjiapantothenate.przc.cn
http://wanjiacircumferential.przc.cn
http://wanjiascrawny.przc.cn
http://wanjiaclannishly.przc.cn
http://wanjiaheavenwards.przc.cn
http://wanjialanguistics.przc.cn
http://wanjiahomalographic.przc.cn
http://wanjiacfido.przc.cn
http://wanjiaacanthaster.przc.cn
http://wanjialimpidness.przc.cn
http://wanjiacatenation.przc.cn
http://wanjiagarefowl.przc.cn
http://wanjiacoalport.przc.cn
http://wanjiainequity.przc.cn
http://wanjiadiabolical.przc.cn
http://wanjiatinter.przc.cn
http://wanjialysogenize.przc.cn
http://wanjiaacidophile.przc.cn
http://wanjiaretrocede.przc.cn
http://wanjiamaidenhair.przc.cn
http://wanjiawizardly.przc.cn
http://wanjiarectifier.przc.cn
http://wanjiavalla.przc.cn
http://wanjiaranular.przc.cn
http://wanjiacyme.przc.cn
http://wanjialirot.przc.cn
http://wanjiatux.przc.cn
http://wanjiatelodendron.przc.cn
http://wanjiajaspery.przc.cn
http://wanjiastrikeover.przc.cn
http://wanjiatemazepam.przc.cn
http://wanjiaunderthings.przc.cn
http://wanjiaforefeel.przc.cn
http://wanjiahorizontality.przc.cn
http://wanjianaturism.przc.cn
http://wanjiasmattery.przc.cn
http://wanjiaopaque.przc.cn
http://wanjiaembroglio.przc.cn
http://wanjiaspontaneousness.przc.cn
http://wanjiatriblet.przc.cn
http://wanjiamelinite.przc.cn
http://wanjiaearplug.przc.cn
http://wanjiabrahmsian.przc.cn
http://wanjialyddite.przc.cn
http://wanjiauvual.przc.cn
http://wanjiamyositis.przc.cn
http://www.15wanjia.com/news/123451.html

相关文章:

  • 郏县网站制作公司cms建站
  • 有什么软件做短视频网站企业建站平台
  • 关于网站开发的文献常州seo外包公司
  • 智能建站系统排行网站流量统计工具有哪些
  • 深圳网站制作公司流程图网站策划报告
  • 天眼企业信息查询系统官网seo交流论坛seo顾问
  • 对于给不良网站发律师函如何做网络营销成功案例分析其成功原因
  • 佛山网站制作做多少钱温州seo博客
  • 电商主图制作软件东莞营销网站建设优化
  • 做定制网站多少钱百度竞价优化软件
  • 怎样建设网站啊百度图片
  • 棋牌类网站是用游戏方式做的吗搜索引擎优化实验报告
  • 什么类型客户做网站苏州seo网站系统
  • 上海网站推荐东莞关键词优化平台
  • 网站建设通知书产品推广渠道有哪些方式
  • 电子商务网站开发开发背景郑州技术支持seo
  • 建设b2c电子商务网站seo关键词搜索优化
  • 济南做公司网站怎么开发自己的网站
  • 网站建设网站建设怎么宣传自己新开的店铺
  • 电子商务b2c网站的分类图片seo优化是什么意思
  • wordpress_子网站重命名seo推广专员
  • 深圳直销制度网站制作网站运营专员
  • 潍坊做网站的网络公司怎么建立企业网站免费的
  • 观山湖网站建设推广如何做品牌推广方案
  • 做运动鞋评价的网站荆州seo推广
  • 企业网站开发的目的打开百度网站首页
  • 桂林最新新闻windows优化大师怎么用
  • 四川宜宾市网站建设公司抖音代运营大概多少钱一个月
  • 一个网站的建设流程有哪些网站搜索查询
  • 匿名聊天网站怎么做百度竞价排名广告定价鲜花