摘要:本篇是web前端JavaScript常见的面试题总结,希望对前端开发的学习与面试有一定的帮助。
本篇是web前端JavaScript常见的面试题总结,希望对前端开发的学习与面试有一定的帮助。
1. 与foo有关:
foo指的是程序员用来代表数据,功能,属性的变量,就是随便定义的,相当于张三,李四
2. null,0,undefined,true与false
1.null和undefined与任何有意义的值比较,都是false
console.log(null == undefined); //true
console.log(null == 0); //false
console.log(null == ""); //false
console.log(1 == true); //true
console.log(0 == false); //true
3. 求数组中最大值
(1) Math.max.apply(null,数组)(Math.max()中不支持数组,所以使用apply()方法将数组转化为一个个参数,第一个参数是null是只是先更实用这个方法,返回结果就行了)
var max = Math.max.apply(null, [1, 888, 88]);
console.log(max);
(2)Array.max()是没有这个方法的
4. 连接符+的使用
console.log(1+ +'2'+'2');结果输出字符串32,(第一个+’2‘中的加号是一元加操作符,+’2‘会变成数值2,所以1+ +’2‘相当于1+2)
5. 跨域请求和同源策略
(1)浏览器的核心安全策略是同源策略,用于防御非法攻击的,但是也不能因为非法攻击就把所有的跨域都毙掉
(2)跨域:协议,域名(不同的域名指向同一个IP,也非同源),端口号
(3)跨域出现的原因:浏览器的同源策略不许不同源间有交互
(4)浏览器允许发起跨域请求,但是返回来的数据会被浏览器拦截
(5)跨域的解决方案:JSONP,跨域资源共享CORS,Nginx正反代理
(6)JSONP:早期的解决方案,只支持GET请求,不支持POST请求;实现原理:script标签不受同源策略的影响,用script标签的src属性请求数据接口,然后通过函数调用接收数据(JSONP不是异步的,所以和Ajax没关系,是JavaScript脚本请求)
$.ajax()除了可以发起Ajax请求,还可以发起JSONP请求
jQuery发起JSONP请求,默认会携带一个callBack=jQueryxxx的参数(随机的)
$.ajax({
//type: '', /POST或GET
url: '',
dataType:'jsonp',
//data: {},
success: function(resp) {},//接收服务器返回的数据
error: function() {}
})
(7)CORS:支持GET/POST,但是可能不兼容低版本的浏览器
6. 四种本地存储方法(session Storage…)
cookie(document域下面的),sessionStorage(window域下面的),localStorage(window域下面的),indexedDB(window域下面的)
1
(1)数据存储在浏览器上,不需要经过服务器,刷新或关闭页面数据也不会丢失,他们都是key value存储的
(2)cookie在同一源下都是可用的(即使打开了同一源下的不同窗口),但是不允许跨浏览器,跨源;cookie的使用document.cookie,在 一段时间内有效,cookie存在于头部,每次都随头部提交(每次在客户端与服务器端来回传递),cookie往往用来保存用户的登录状态
(3)为什么有了cookie还要用local Storage呢?因为每次请求的时候都会将头部的cookie作为请求的一部分,会很浪费带宽,在H5提出了local Storage;localStorage的使用localStorage.setItem('key','value');local Storage读取值:local Storage.getItem(‘k’);localStorage不会每次随请求头提交,可长时间保存页面(除非手动删除,不能跨浏览器,跨源)
set.addEvenListenter('click', function() {
localStorage.setItem('uname', '小明');
localStorage.getItem('uname');
localStorage.removeItem('uname');
localStorage.clear();
})
(4)sessionStorage使用方法与local Storage一样,不随头部提交,页面关闭就会失效,只能存储字符串
7. HTTP与HTTPS的区别
(1)HTTP是超文本传输协议,是基于TCP/IP的在客户端与服务器端如何传输数据的网络协议,是无状态协议(客户端是无状态存储,访问网站需要重复的登录,所以就出现了cookie/session技术),直接明文传输(密码等可能被中途截取),每次建立连接时都需要三次握手四次挥手
(2)HTTPS是基于HTTP协议,通过SSL/TSL(客户端与服务器先建立安全通道,服务器端发送证书告诉客户端我是安全的服务器,然后服务器发送一个箱子,客户端会将数据放入箱子进行数据传输)进行数据加密,客户端身份认证,用以保护数据
8. POST与GET(POST和GET是HTTP请求的两种方法)
(1)get请求用于获取数据(一般都是一些大众可见的数据,可以被浏览器缓存),post请求会传输数据到后台(比如用户名,密码,是不能被浏览器缓存的)
(2)get传参时,会在url地址栏可见,安全性较差,参数长度有限制;post传参时,参数在requestbody中
(3)get请求在回退刷新页面时不会有影响,post请求在回退/刷新时会重新发送请求(get效率更高)
(4)get只支持URL编码,而post支持多种编码
(5)因为HTTP是基于TCP/IP的,所以GET和POST也是基于TCP/IP的
(6)GET发送一个TCP数据包,POST 发送两个TCP数据包(火狐产生一个)
(7)GET请求会把header和data一起发送给服务器(返回200状态码);POST先发送header给服务器,服务器响应100;再将data数据发送给服务器,服务器响应200(所以在网络不好的情况下,GET会更快)
9.symbol
(1)symbol是ES6新引入的基本数据类型的一种(String,Number,Boolean,Undefined,Null,)
(2)symbol表示独一无二的值
let sym=Symbol(‘foo’);
typeof sym;//输出'symbol'
(3)因为不是对象,所以无法使用New关键字,因此不能给它添加属性
10.柯里化?
(1)柯里化:将上面的函数拆分成两个函数,每个函数只接受一个参数
function add(a) {
return function(b) {
return a + b;
}
}
const f = add(10);
const test = f(1)
console.log(test);
(2)柯里化函数的作用:使用柯里化技术可以实现参数的复用,大大的减少代码量(实际开发中经常会出现重复的参数)
(3)柯里化的作用:延迟执行
11.this指向
(1)this指向他的调用者
(2)call(修改后的this指向,参数一,参数二)(会被理立即调用)
(3)apply(修改this的指向,【数组】)(会被立即调用)
(4)bind()(不会立即调用,会生成新的函数,需要接收,做定时器)修改this的指向
12.闭包?
(1)JavaScript语言的特殊之处:函数内部可以直接读取全局 变量;在函数外部无法直接读取函数内的局部变量
(2)在函数内部定义变量不适用var ,相当于声明了一个全局变量
function f1(){
n=999;
}
f1();
alert(n); // 999
(3)闭包就是能够读取到其他函数内部变量的函数(就是将函数内外链接起来的桥梁),如下所示,f2()就是闭包
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
(4)闭包的用途:可以读取函数内部的变量;使变量的值始终保存在内存中
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
(5)使用闭包的注意点:因为变量始终保存在内存中,使内存消耗很大,解决方法:退出函数前,将不用的变量全部删除
13.作用域链
(1)作用域:变量的可用范围就是作用域
(2)作用域链:(和原型链好像)查找变量时,先从当前上下文的变量对象中查找,若没有到父级执行上下文的变量对象中查找,一直到全局上下文对象,这样的由多个执行上下文变量对象构成的链表叫作用域链
14.执行栈/执行上下文
1.运行代码的时候可以生成执行上下文(执行环境),决定着代码的作用域;如下执行上下文分为三种:
(1)全局环境
(2)函数环境
(3)Eval环境(慎用,一般不考虑)
2.每次创建执行上下文的时候,分为创建阶段和执行阶段(如下用函数举例)
(1)创建阶段:创建作用域链,变量对象(变量,函数声明等),决定this值
(2)执行阶段:变量赋值,函数引用
3.执行任何代码前,先创建全局执行上下文,再创建作用域链(因为是全局执行上下文,所以只有全局变量对象),
15.单位px,em,rem,vw,vh的区别
(1)px是像素值,是绝对单位,是固定的,就像厘米,米一样
(2)em和rem是相对单位,缩小屏幕时,字体大小也随之发生变化,就用到了em和rem;
(3)默认1em=16px,当自己元素上有fontSize:32px,则1em=32px,也可以给父元素设置font Size从而影响自己em的值
(4)默认1rem=16px,只能修改html标签,从而影响自己rem的值
(5)vh和vw是根据窗口的宽高,分为100等分,100vh就表示满高,50vh表示一半高
.div-vh-vw {
width: 100vw;
/* // 视窗宽度的 1/10 */
height: 100vh;
/* // 视窗高度的 1/10 */
background-color: pink;
}
/* %百分比的用法:父元素的宽高作为参照值 */
.div-vh-vw-child {
width: 50%;
height: 50%;
background-color: aliceblue;
}
16.清除浮动
(1)清除浮动的原因:父元素未设置高度,,导致父元素塌陷;浮动元素脱标影响后面的标准流
(2)额外标签法:在浮动元素末尾加一个新的标签(必须是会块级元素)
(3)父级元素添加 overflow:hidden;(父元素塌陷也用 overflow:hidden; )
(4)给父元素添加 :after伪元素法 相当于额外标签法的升级版(在盒子的后面插入新的标签)
.clearfix:after { content: ""; display: block; height: 0; clear: both; }
1
(5)给父元素添加 双伪元素法 盒子的前后都添加标签
.clearfix:before,.clearfix:after { content: ""; display: table; } .clearfix :after{ clear:both; } }
1
17.数组去重
(1)ES6中的Set去重,但这种方法不会去重{}(空对象)
(2)双重for循环+splice()去重,依然无法去重{}
var arr = [1, 1, null, {}, 3, {}, null];
function test(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
//arr.splice(起始项,个数);
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
console.log(test(arr));//一样无法去重{}
(3)indexOf去重,{}一样无法去重
var arr = [1, 1, null, {}, 3, {}, null];
function test(arr) {
var newArr = [];
if (!Array.isArray(arr)) {
console.log('不是数组');
return;
} else {
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
}
console.log(test(arr));
(4)sort()排序(直接把null都去除了),{}无法去重
var arr = [9, 1, 1, null, {}, 3, {}, null];
function test(arr) {
//先排序
var arr = arr.sort();
//新建数组
var newArr = [];
if (!Array.isArray(arr)) {
console.log('这不是个数组');
return;
} else {
for (let i = 0; i < arr.length; i++) {
if (arr[i] != arr[i + 1]) {
newArr.push(arr[i]);
}
}
return newArr;
}
}
console.log(test(arr));
(5)includes()去重(和sort()好像,就是不需要sort()排序),{}无法去重
var arr = [9, 1, 1, null, {}, 3, {}, null];
function test(arr) {
var newArr = [];
if (!Array.isArray(arr)) {
console.log('这不是个数组');
return;
} else {
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
}
console.log(test(arr));
18.for…in和for…of的区别?
(1)for…in用于遍历对象属性,for…of可以遍历数组
(2)for…of新语法弥补了for…in的不足(两者都可以遍历数组,但是对于自定义属性,for…of是不会遍历 的)
let persons = ['小明 ', '小刚', '小红'];
persons.name = 'paka';
for (let k in persons) {
console.log(k);//输出0,1,2
}
for (let k of persons) {
console.log(k);输出name,小明,小刚,小红
}
(3)for…of不能遍历对象,需要搭配Ojbect.keys()使用
19.promise
(1)promise是回调函数(回调函数一般需要触发条件然后来执行的)的升级,里面保存着未来才会结束的事件(通常是异步事件);所以在处理花费长时间的任务时,使用promise进行异步处理,防止阻塞
(2)使用promise只会导致两种结果,成功返回resolve用then来表示,失败返回reject用catch来表示,用finally来表示无论状态如何都会执行的操作(不接受参数,与promise的状态无关,不依赖promise的执行结果)
(3)无参数的
const isTrue = false;
const promise = new Promise((resolve, reject) => {
if (!isTrue) {
resolve('是错的');
} else {
reject('是对的');
}
});
promise
.then(test => {
console.log('小明的回答' + test);
})
.catch(test => {
console.log('小明的回答' + test);
})
.finally(() => {
console.log('请小明回答了问题');
})
(4)有参数的
const imgAdd = 'https://i0.hdslb.com/bfs/feed-admin/9a10ffd36796f073f8a5a40d59ecde145aa8d145.png';
const promise = (url) => {
return new Promise((resolve, reject) => {
let img = new Image();
let error = new Error('图片有误');
img.src = url;
img.onload = () => {
resolve(img);
};
img.onerror = () => {
reject(error);
};
});
}
promise(imgAdd)
.then(img => {
console.log('失误了');
document.body.appendChild(img);
})
.catch(error => {
document.body.innerHTML = error;
})
20.图片懒加载与自定义属性data-src
(1)网页有很多图片,图片是非常吃流量的,当用户还没有浏览到图片,我们就没有必要把图片加载出来
(2)因此肯定需要scroll事件监听;窗口显示区的高度window.innerHeight;图片到视窗上边的距离getBoundingClientRect().top
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。 臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 今当远离,临表涕零,不知所言。
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。 臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 今当远离,临表涕零,不知所言。
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。 臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 今当远离,临表涕零,不知所言。
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。 臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 今当远离,临表涕零,不知所言。
21.单线程异步执行机制
JavaScript是单线程,同一时间只能做一件事,但是有时会等待时间过长(Ajax从网络获取数据)
将任务分为同步任务和异步任务
异步任务队列中的事件有IO事件和用户事件(鼠标点击,页面滚动)和定时器;异步任务必须指定回调函数;开始执行异步任务就是执行回调函数
在主线程上先执行同步任务(在执行栈中执行),同步任务执行完后,系统就会执行进入任务队列,执行任务队列中的异步任务。不断重复以上步骤
22.set和map?
(1)es6新的数据结构set和map
(2)set和map的应用场景:数组去重和数据存储
(3)set成员值唯一且无重复的值,Set本身是一个构造函数
(4)
23.防抖?
(1)防抖策略:当事件被触发后,延迟N秒,执行回调函数,如果在N秒内事件又被触发,则重新延迟事件
(2)好处:当频繁的触发某个事件时,保证回调函数只被执行一次
(3)防抖的应用场景:输入框在输入字符时,通过防抖策略,只有在用户输入完成后,才发出请求,减少请求的次数,节约资源
24.深浅拷贝
(1)浅拷贝:拷贝数据,还是指向同一地址,所以当拷贝后的数据发生变化时,拷贝前的数据也会发生变化
var obj = {
name: '小明',
age: 20,
};
var o = {};
//assign(新的对象,旧的对象)
Object.assign(o, obj);
console.log(o);
(2)深拷贝,不仅会拷贝数据也会拷贝一份新的地址,所以在改变拷贝后的数据时,拷贝前的数据不会发生变化
var obj = {
name: '小明',
age: 20,
address: '北京路清河街'
};
var o = {};
function test(newObj, oldObj) {
for (let k in oldObj) {
let item = oldObj[k];
if (item instanceof Array) {
newObj[k] = [];
test(newObj[k], item);
} else if (item instanceof Object) {
newObj[k] = {};
tets(newObj[k], item);
} else {
newObj[k] = item;
}
}
}
test(o, obj);
console.log(o);
25.mouse over和mouseenter区别
(1)mouseover鼠标经过自身盒子会触发,经过子盒子也会触发;mouseEnter只会经过自身盒子触发 (mouseenter不会冒泡)
(2)mouse enter与mouse leave搭配使用;mouse over和mouseout搭配使用
我是小职,记得找我
✅ 解锁高薪工作
✅ 免费获取基础课程·答疑解惑·职业测评
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号