01、描述事件冒泡的流程

基于 DOM 树结构,事件会顺着触发元素向上冒泡

点击一个div,会一级一级向父级、爷级元素上冒泡,这个点击事件不仅能被这个div捕捉到,也能被他的父级、爷爷级…元素捕捉到

例如:

<style>
div{
width:200px;
height: 200px;
background-color: red;
}
</style>
<div id="idv1">
<button id="btn">点击</button>
</div>
let aBtn = document.getElementById("btn")
let oDiv = document.getElementById("div1")
aBtn.onclick = function (){
console.log(0)
}
oDiv.onclick = function (){
console.log(1)
}

event.stopPropagation() ; 阻止时间冒泡--->在子级

aBtn.onclick = function (event){
event.stopPropagation()
console.log(0)
}

02、⽆限下拉的图⽚列表,如何监听每个图⽚的点击?

<ul id="uli">
<li>1</li>
<li>2</li>
<li>3</li>
</ul> <script>
let uli = document.getElementById("uli")
uli.onclick = function (event){
if(event.target.nodeName === "LI"){ // tagName
console.log(event.target) // 获取触发的元素
} }
</script>

03、你常⽤哪些BOM API?

navigator对象包含了所有浏览器的配置信息

        // navigator.platform:操作系统类型;
// navigator.userAgent:浏览器设定的User-Agent字符串。
// navigator.appName:浏览器名称;
// navigator.appVersion: 浏览器版本;
// navigator.language:浏览器设置的语言;
// navigator.cookieEnabled: 判断cookie是否启用(true是启用了)
// navigator.plugins — 是个集合 判断是否安装了指定插件(plugin)

location保存的是浏览器地址栏相关信息:获取当前窗口地址,可以改变当前窗口的地址

        // location.protocal: 协议名 (http)
// location.host: 主机名+端口号 (aa.cn:8080)
// location.hostname: 主机名 (aa.cn)
// location.port: 端口号 (8080)
// location.pathname: 相对路径 ( test/index.html)
// location.search: ?及其之后的查询字符串 (?username=shuai&kw=帅)
// location.hash: #锚点名

history对象保存当前窗口打开后,成功访问过的url的历史记录栈,内容不对开发人员开放,无法修改,只能进行三个操作:

        前进:history.go(1); //前进一次
后退:history.go(-1);
刷新:history.go(0);

screen 对象包含有关用户屏幕的信息。

     // window.innerHeight - 浏览器窗口的内部高度
// window.innerWidth - 浏览器窗口的内部宽度 包含滚动条
可视区宽高:
document.documentElement.clientWidth 可视区 宽度 不包含滚动条
document.documentElement.clientHeight 可视区 高度 不包含滚动条
滚动距离: document.documentElement.scrollTop IE其他浏览器
document.documentElement.scrollLeft //横向

04、DOM有哪些常⽤的API?

获取元素:

    // const oUl = document.querySelector("ul");
// const oUl = document.querySelector("body #ul1");
// const oUl = document.getElementsByTagName("ul")[0];
// const oUl = document.getElementById("ul1");
// const oUl = document.getElementsByClassName("ul1")[0];
// const oUl = document.querySelectorAll("ul")[0];
// const oDiv = document.getElementById("div1");
// const oUl = oDiv.querySelectorAll("ul1");

创建节点:

createElement

获取元素:

childNodes

offsetParent

parentNode

插⼊元素(剪切)

appendChild

insertBefore

删除元素

removeChild

05、⼀次性插⼊多个DOM节点,考虑性能

        const oF = document.createDocumentFragment();
        function tinajia() {
for (let i = 0; i < 100; i++) {
let lis = document.createElement('li')
oF.appendChild(lis)
}
uli.appendChild(oF)
}
tinajia();

06、attr和property的区别?

property 操作不体现到HTML结构中

attribute 会改变HTML结构

两者都有可能引起DOM重新渲染

        let div1 = document.getElementById('div1')
// property
div1.index = 1;
console.log(div1.index);
// attr
div1.setAttribute("index", "1");
console.log(div1.getAttribute("index"));

07、cookie、localStorage、sessionStorage区别?

cookie
最⼤存4k
http请求会携带cookie,增加请求数据⼤⼩ document.cookie localStorage
sessionStorage
最⼤存储5M
http请求不携带 localStorage localStorage
本地永久存储,除⾮代码删除或⼿动删除 sessionStorage
数据只存在当前会话,浏览器关闭则清空

08、跨域常⽤实现⽅式有哪些?

所有的跨域都必须经过server端允许与配合
【JSONP】
$.ajax({
url:"http://localhost:20002/MyService.ashx?
callback=?",
dataType:"jsonp",
jsonpCallback:"person",
success:function(data){
alert(data.name + " is a a" + data.sex);
}
});
【CORS】
response.setHeader('Access-Control-Allow-Origin',
'http://baidu.com')
response.setHeader('Access-Control-Allow-Headers', 'XRequested-With')
response.setHeader('Access-Control-Allow-Methods',
'PUT,POST,GET,DELETE,OPTIONS')
response.setHEader('Access-Control-Allow-Credentials',
'true')
同源策略:
协议、域名、端⼝三者必须⼀致
加载图⽚、css、js⽆视 "同源策略"

09、⼿写⼀个简易的 ajax

const url = "./data2.json";
      function ajax(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.send(null);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.responseText));
} else if (xhr.status === 404) {
reject(new Error("404。。。。"));
}
}
};
});
}
      const oBtn = document.getElementById("btn1");
oBtn.onclick = fn;
async function fn() {
try {
let data = await ajax(url);
console.log(data);
} catch (err) {
console.error(err);
}
}
      function ajax(url, fn) {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true); // true 异步 false 同步
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// if (fn) {
// fn(JSON.parse(xhr.responseText));
// }
fn && fn(JSON.parse(xhr.responseText));
}
}
};
xhr.send(null);
}

面试 考察js基础不能不会的内容(第五天)的更多相关文章

  1. JS基础入门篇(三十五)—面向对象(二)

    如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)

  2. JS基础-该如何理解原型、原型链?

    JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...

  3. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  4. 前端工程师面试问题归纳(一、问答类html/css/js基础)

    一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...

  5. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  6. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  7. 前端面试(原生js篇) - DOM

    根据我的面试经历,一般小公司的面试环节,比较关心框架的熟练程度,以及独立开发组件的能力 但大厂通常有五轮以上的面试,而且对 js 基础语法很是看重 于是我总结了一些关于 js 基础的面试对话,有的当时 ...

  8. 2019前端面试系列——JS面试题

    判断 js 类型的方式 1. typeof 可以判断出'string','number','boolean','undefined','symbol' 但判断 typeof(null) 时值为 'ob ...

  9. JS基础-全方面掌握继承

    前言 上篇文章详细解析了原型.原型链的相关知识点,这篇文章讲的是和原型链有密切关联的继承,它是前端基础中很重要的一个知识点,它对于代码复用来说非常有用,本篇将详细解析JS中的各种继承方式和优缺点进行, ...

  10. js 基础

    js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...

随机推荐

  1. KingbaseES R6 集群“双主”故障解决案例

    实际工作中,可能会碰到集群脑裂的情况,在脑裂时,会出现双 primary情况.这时,需要用户介入,人工判断哪个节点的数据最新,减少数据丢失. 一.测试环境信息 操作系统: [kingbase@node ...

  2. KingbaseES 如何开启并进入数据库

    关键字: KingbaseES.sys_ctl.ksql 一.数据库启动前环境检测 1.1 查看kingbase用户环境变量配置 图1-1 查看.bashrc环境变量配置 1.2 应用环境变量 [ki ...

  3. shell脚本自动化部署Zabbix4.2(修改脚本替换版本)

    #!/bin/bash # 检查操作系统版本,该脚本只能运行在 Centos 7.x 系统上 cat /etc/redhat-release |grep -i centos |grep '7.[[:d ...

  4. 聊聊 asp.net core 认证和授权

    使用asp.net core 开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.net core 框架中的认证和授权的源码来分析 ...

  5. Elasticsearch:Cluster备份 Snapshot及Restore API

    Elasticsearch提供了replica解决方案,它可以帮我们解决了如果有一个或多个node失败了,那么我们的数据还是可以保证完整的情况,并且搜索还可以继续进行.但是,有一种情况是我们的所有的n ...

  6. 前端ES6 面试过关宝典

    ES6 部分 Typescript 部分 前端工程面经(节流防抖.https.前端攻击.性能优化...) https://juejin.cn/post/6844903734464495623 ES6面 ...

  7. 【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析

    问题描述 在使用App Service的过程中,发现应用频繁出现503错误,通过Kudu站点获取到Logfiles. 在 Eventlog.xml 文件中,发现大量的 Microsoft.Window ...

  8. ImGUI 1.87 绘制D3D外部菜单

    ImGUI 它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,该框架通常会配合特定的D3Dx9等图形开发工具包一起使用,ImGUI常用来实现进 ...

  9. 5G 与数字化转型的关系是怎样的?

    5G提供的是通信网络服务,数字化转型需要网络服务,但并不是必须使用5G网络,也就是说5G在数字化转型中并不是必虚的,但可以作为备选项,不过在某些行业比如农业.林业.牧业.港口.建筑等布设有线网络.无线 ...

  10. GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告

    使用GCC Arm工具链开发的项目, 在升级到 arm-gnu-toolchain-12.2 之后, 编译出现警告 arm-gnu-toolchain-12.2.mpacbti-bet1-x86_64 ...