2022前端知识点总结(更新中)

1、 浅拷贝:Object.assign()和es6展开运算符

相信不少人都了解Object.assign()实现浅拷贝的用法,经个人测试,发现es6的展开运算符也可以实现,具体写法如下:

				var aaa ={
                    name:'张三'
                }
                var bbb = {
                    ...aaa
                }
                bbb.name = '李四'
                console.log(aaa,'aaa')//{name: "张三"} "aaa"
                console.log(bbb,'bbb')//{name: "李四"} "bbb"

2、Vue中data数据为什么定义为函数形式(引用类型的特点)

原因:

1,data组件都是vue的实例

2,组件共享data属性,当data的值是用一个引用类型的时候,改变其中的值会影响到其他的

3,组件中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件,都会返回一份新的data,类似于给没个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。

如果单纯的写成对象形式,就会使所有组件实例共用了一份data数据,会造成一个改变全部跟着改变的结果

引用类型:(1、Object类型;2、Function类型;3、Array类型;4、Date类型)

类型将指针存在栈中,将值存在堆中。 当我们把对象值赋值给另外一个变量时,复制的是对象的指针,指向同一块内存地址,意思是,变量中保存的实际上只是一个指针,这个指针指向内存堆中实际的值,数组 对象

3、事件委托

事件代理(Event Delegation),又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定在子元素的响应事件(click、keydown…)委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡

事件冒泡与事件捕获:

事件冒泡与事件捕获是浏览器触发事件的两种情况,一种是从html标签一直往下,一直到你触发事件的元素,一种是从你点击的事件处开始冒泡,把事件当做泡泡一直浮动到html标签。学习事件处理的机制可以在实际开发中做一些相关优化。如下:

<ul>
		<li>1</li>
		<li>2</li>
		<li>3</li>
		<li>4</li>
		<li>5</li>
	</ul>

我们想要通过点击li获取li的数字,我们怎么做,第一时间想到的,在每一个li上面绑定事件,通过事件传入每一个li本身,获取innnerHTML.如下

<li onclick="clickLi(this)">1</li>
function clickLi(li) {
		console.log(li.innerHTML);
	}

但可以设想,如果li多了,我们每一个li都绑定一个点击事件,且不说性能问题,单是这样看起来已经很蠢了好吧,结合上面我们说的事件冒泡,点击事件会一路传递到html标签,那么我们可以在父元素ul上面监听点击事件。如下

<ul onclick="cliclUl()">

4、map和forEach区别

map:有返回值,可以开辟新空间,return出来一个length和原数组一致的数组,即便数组元素是undefined或者是null。
forEach:默认无返回值,返回结果为undefined,可以通过在函数体内部使用索引修改数组元素。
map的处理速度比forEach快,而且返回一个新的数组,方便链式调用其他数组新方法。

5、在一个JS文件中引用另一个JS文件

方法一
  在调用文件的顶部加入下例代码:

  document.write(”<script language=javascript src='js/import.js’></script>”);

  (注:有时你引用的文件还可能需要引用其他的js,我们需要将需要的那个js文件也以同样的方法引用进来)
方法二
  通过中间界面对js进行应用,就是我们可以在某个html中引用了你需要的js文件,我们可以通过拿到那个html文件的对象,然后在通过这个对象去引用js的方法。
方法三

将下边代码放入Body中:

new_element=document.createElement(”script”);
new_element.setAttribute(”type”,”text/javascript”);
new_element.setAttribute(”src”,”import.js”);
document.body.appendChild(new_element);

我们来分析一下关键的几句代码:

  首先,我们利用document.createElement(”script”)生成了一个script的标签,设置其 type属性为text/javascript,src为import.js(这里的1.js同2.js放在同一个目录,也可放在不同的目录)。最后将这个标签动态 地加入body中。如此一来,我们就可以调用到不同js文件中的方法了。

  注意:<script language=”JAVASCRIPT” src=’1.js’></script>一定要放在body下面。因为在2.js中用到了body(document.body.appendChild(new_element);)如果将引如2.js的代码放在body上面,也就是说,进入页面后,还没有生成body就已经执行b.js里的document.body.appendChild(new_element);了。这时body不存在就会抛javascript错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值