JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试
这里涉及到了两个js的内容,js的事件捕获和事件冒泡。
在冒泡阶段,才会处理我们的一些事件对应函数等。
整体上js代码,执行时是先进行事件捕获再事件冒泡!
–>
div1
div2
事件修饰符self:只有event.target是当前操作的元素时,才触发事件。
首先,解释一个event事件对象,在冒泡阶段现象:
<button @click=“showInfo”>点我提示信息
介绍两个vue的事件,@scroll和@wheel (注意,@是v-on指令), 前者是一句css的overflow滚动条绑定的事件,后者是鼠标滚轮绑定的事件。
例如:下面的效果。
passive事件修饰符:事件的默认行为立刻执行,无序等待事件回调执行完毕。这个就可以解决上图的问题。
==============================================================================
专门讲解一下js代码中的事件对象event。
-
在js中,我们平时指定的事件是不能直接拿到event事件对象的,但是可以通过window.event来操作。
-
在jqurey中,我们通过jquery绑定的事件函数会默认拿到一个event值的数据。例如:$(“#in”).keyup(function(event){console.log(event.keyCode);})。
-
在Vue中,可以直接通过$event拿到event事件对象。
event事件对象常用的几个形式:
-
event.target 或 event.target.value 。
-
event.key(获取按键名) 或 eventkeyCode(获取按键对应编码)。
=========================================================================
Vue中的两个键盘事件:keydown 和 keyup 。
-
keydown:就是按下按键就触发。
-
keyup:就是按下按键必须抬起来再触发。(一般使用keyup)
原始办法,直接使用事件对象的event,event.keyCode可以拿到不同按键对应的不同的编号。
然后通过判断我们想要对应的键盘符号,例如:回车。
<input type=“text” placeholder=“按下回车提示” @keyup=“showInfo”/>
在Vue中,我们就可以调用Vue的别名。vue给常用的按键都起了一个别名,我们可以通过别名,来对不同按键进行操作。
Vue中常用的按键别名:
-
enter 回车。
-
delete 删除(捕获 删除 和 退格 键)。
-
esc 退出。
-
space 空格。
-
tab 换行。(tab,只能配置keydown实现!)
-
up 上。
-
down 下。
-
left 左。
-
right 右。
<input type=“text” placeholder=“按下enter提示” @keyup.enter=“showInfo”/>
<input type=“text” placeholder=“按下delete提示” @keyup.delete=“showInfo”/>
<input type=“text” placeholder=“按下esc提示” @keyup.esc=“showInfo”/>
<input type=“text” placeholder=“按下space提示” @keyup.space=“showInfo”/>
<input type=“text” placeholder=“按下tab提示” @keyup.tab=“showInfo”/>
<input type=“text” placeholder=“按下up提示” @keyup.up=“showInfo”/>
<input type=“text” placeholder=“按下down提示” @keyup.down=“showInfo”/>
<input type=“text” placeholder=“按下left提示” @keyup.left=“showInfo”/>
<input type=“text” placeholder=“按下right提示” @keyup.right=“showInfo”/>
直接通过按键全名来操作,不使用Vue的别名:
<input type=“text” placeholder=“按下enter提示” @keyup.Control=“showInfo”/>
<input type=“text” placeholder=“按下enter提示” @keyup.caps-lock=“showInfo”/>
注意:tab键的使用,tab键比较特殊,它是切换下一内容的。因此如果绑定tab键,我们只能用keydown,不能用keyup,因为tab已经切换到下一个了,就不会执行keyup的事件函数了。
也可以通过编码方式指定按键(不推荐,已经过时):
系统修饰键:ctrl , alt , shift , meta(这个按键是键盘的win键) ,tab。
这几个键比较特殊,一般用来配合其他按键使用的!
两种情况:
-
配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键盘。
-
配合keydown使用:正常触发事件。(除了tab键!)
如果我们想要两个按键叠加的效果,比如,我们向要用ctrl + y 这个按键来实现。可以定义为下面这样:
我们可以使用Vue.config.keyCodes.xxx来定义一个别名按键,从而在让Vue使用:(不推荐,因为没必要知道就行)
Vue.config.keyCodes.aaa = 13; 这样aaa也能被Vue使用了
每一个事件是可以重叠的:
但是,顺序不同,不一样,就像上面先阻止了跳转,再阻止了冒泡。
==============================================================================
{{Myfun}}
{{Myfun()}}
结果不难看出,差值语法调用函数需要加上(),不要和绑定vue的指令事件函数搞混了。
==========================================================================
定义:要用的属性不存在,要通过已有属性计算得来。
计算属性很好理解,就是从vue实例对象中,现有的属性也就是data中的内容,去加工计算,从而得到一个新的属性(也就是计算属性)。
computed计算属性的不同处:
-
data中,写什么就是什么,直接发给Vue实例对象。
-
methods中,也是写什么就是什么。
-
computed就比较特殊,它不是放上去什么就是什么,所谓的计算属性,就是通过一个对应的get方法拿到的return值,这个return的值的名字就是我们在computed自己定义的属性名。
计算属性有get,当然也有set方法,这两个方法的作用以及什么时候调用,都在下面代码中:
姓:
名:
全名: {{fullName}}
计算属性的简写形式:
姓:
名:
全名: {{fullName}}
总结,计算属性并不是在Vue的实例对象上面放了一个函数,而是把函数return的值返回给了Vue实例对象,该值的名字就是计算属性对应的属性名。
注意事项,见下方代码:
今天天气很{{info}}
<button @click=“isHot = !isHot”>切换天气
==========================================================================
Vue的监视属性就是watch属性,它可以监视实例对象data中的内容以及计算属性的值。
不管是watch和$watch里面都有一个handler回调函数,来实现函数操作。
今天天气很{{info}}
<button @click=“changeWeather”>切换天气
可以直接通过vm的$watch来定义监听事件。
**注意:
这里不能直接写ishot,必须写"ishot"或’ishot’。**
**原因:
其实在上面的watch定义的ishot本质上是’ishot’或"ishot",所以这里也是要写成这种形式。**
<!doctype html>
js基础
1)对js的理解?
2)请说出以下代码输出的值?
3)把以下代码,改写成依次输出0-9
4)如何区分数组对象,普通对象,函数对象
5)面向对象、面向过程
6)面向对象的三大基本特性
7)XML和JSON的区别?
8)Web Worker 和webSocket?
9)Javascript垃圾回收方法?
10)new操作符具体干了什么呢?
11)js延迟加载的方式有哪些?
12)WEB应用从服务器主动推送Data到客户端有那些方式?
sole.log(“切换了”)
this.isHot = !this.isHot;
}
},
//watch监视属性
watch:{
//这里的isHot就是对应到data中的属性,来监听data中的isHot。
isHot:{
//hander什么时候被调用?当isHost发生改变时。
handler(newValue,oldValue){
// handler是可以接受两个参数一个新值,一个旧值。
console.log(“监测data中的isHost的handler可以拿到新值:”,newValue);
console.log(“监测data中的isHost中的handler也可以拿到旧值:”,oldValue);
console.log(“监测data中的isHost中的handler被调用了,监听的监测data中的isHost被修改了!”);
},
//初始化值让handler调用一下。
immediate:true,
},
info:{
handler(newValue,oldValue){
//获得计算属性的中的内容
console.log(“监测计算属性info的handler可以拿到新值:”,newValue);
console.log(“监测计算属性info中的handler也可以拿到旧值:”,oldValue);
console.log(“监测计算属性info中的handler被调用了,监听的监测计算属性info被修改了!”);
}
}
}
})
可以直接通过vm的$watch来定义监听事件。
**注意:
这里不能直接写ishot,必须写"ishot"或’ishot’。**
**原因:
其实在上面的watch定义的ishot本质上是’ishot’或"ishot",所以这里也是要写成这种形式。**
<!doctype html>
js基础
1)对js的理解?
2)请说出以下代码输出的值?
3)把以下代码,改写成依次输出0-9
4)如何区分数组对象,普通对象,函数对象
5)面向对象、面向过程
6)面向对象的三大基本特性
7)XML和JSON的区别?
8)Web Worker 和webSocket?
9)Javascript垃圾回收方法?
10)new操作符具体干了什么呢?
11)js延迟加载的方式有哪些?
12)WEB应用从服务器主动推送Data到客户端有那些方式?
[外链图片转存中…(img-QrKdlGXo-1714985165990)]
[外链图片转存中…(img-Qk8hCzAS-1714985165991)]