首页 > 其他分享 >面试 考察js基础不能不会的内容(第五天)

面试 考察js基础不能不会的内容(第五天)

时间:2022-10-26 19:44:07浏览次数:72  
标签:function const xhr console js 面试 浏览器 第五天 document

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);
      }
 个人博客地址:http://blog.qianbaiyv.cn/get/my/blog/details/2311887075%40qq.com/122

标签:function,const,xhr,console,js,面试,浏览器,第五天,document
From: https://www.cnblogs.com/LiuSan/p/16829787.html

相关文章

  • vue-js中键盘事件编码
    js里面的键盘事件经常用到的:keyCode8=BackSpaceBackSpacekeyCode9=TabTabkeyCode12=ClearkeyCode13=EnterkeyCode16=Shift_LkeyCode17=Control_Lkey......
  • apijson 初探
    apijson初探本文试着从5W1H角度切入,试图快速建立自己对apijson的整体认知,所以这不是一趟快速入门的demo之旅,而是显得比较务虚的探索式知识体系整合。1、Why前后......
  • 奇虎360面试题
    奇虎360笔试题 1.查找文件后缀是log的 三天前的文件删除find / -name "*.log" -ctime +3 -exec rm -rf {} \;  我这么答的 他说可能-exec会出问题,你想想......
  • 太极计算机面试
    太极计算机运维笔试题二、问答题1、在shell环境如何杀死一个进程?2、在shell环境如何查找一个文件?3、在shell里如何新建一个文件?4、在unix系统中改变指定文件目录的访......
  • 面试提问汇总
    1、varnish,nginx,squid各自缓存的优缺点 2、cdn的内部业务 3、查询DNS的深层结构 4、lvs的三种模式 5、lvs/nginx/haproxy优缺点 6、Linux的启动过程 7、......
  • 常见k8s面试
    一、自我介绍现住址、二、k8s网络这方面是怎么处理的。k8s中的pod是有生命周期的,也就是说,它可以在任何时间,死在任何node上。而新生的podip跟之前的pod的ip基......
  • 千禧龙面试题
    1. ftp的两种传输模式?两种传输模式的区别 2. 解释Http中200,302,403,404,500这几种状态定义的含义。 3. Linux内核引导时,从什么文件中读取要加载的文件系统 4. IOS的......
  • 热酷网面试题
    维护几台服务器数据库主要用的是什么,在你以前的工作中遇到什么大的问题没?当时你是如何解决的web服务器用的是什么apache和nginx那个比较熟Apache......
  • 麒麟网面试题
    初级运维工程师/监控工程师 都写过那些脚本?在工作中,使用那些技术比较多,说说对这些技术的认识和理解,对cisco的了解?会配置交换机吗?作了一份题,很简单都是关于网络方面的......
  • 几行JS代码防止网站在QQ和微信被举报
    1<div>2<script>3//跳转提示45if(is_weixn_qq()){;67window.location.href=‘https://c.pc.qq.com/middle.html?pfurl=’+window.location.hre......