jjzjj

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

六扇有伊人 2023-03-28 原文

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

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

  1. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  2. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  3. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  4. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  5. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  6. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  7. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  8. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  9. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  10. ruby - 如何在ruby中提取方括号内的内容 - 2

    我正在尝试提取方括号内的内容。到目前为止,我一直在使用它,它有效,但我想知道我是否可以直接在正则表达式中使用某些东西,而不是使用这个删除功能。a="Thisissuchagreatday[coolawesome]"a[/\[.*?\]/].delete('[]')#=>"coolawesome" 最佳答案 差不多。a="Thisissuchagreatday[coolawesome]"a[/\[(.*?)\]/,1]#=>"coolawesome"a[/(?"coolawesome"第一个依赖于提取组而不是完全匹配;第二个利用前瞻和

随机推荐