web前端笔试试题二(含答案)

1. 判断变量类型的几种方法,并谈谈这几种方法的差异或者局限。

1. 语法:typeof 变量名 / typeof(变量名)
   返回值:返回数据类型的字符串:string、number、boolean、undefined、object(null也返回object)、   function、symbol
   注意:无论引用对象是什么类型 它都返回object

2. 语法:变量名 instanceof 对象类型
   返回值:返回一个布尔值,判断该变量名是否属于该类型
   注意:
      	  typeof null => object
      	  null instanceof object => false
      	  null instance null => 报错

3. 语法:toString.call();
   返回值:返回的类型类似于[object Number]、[object Function]...

4. 语法:变量名.constructor
   返回值:返回该变量名对应的数据类型

5. 语法:Object.getPropertyOf(变量名)
   返回值:返回的是该变量名对应的父类

2. 简述一下src和href的区别

1. 请求资源类型不同

href是超文本引用的简写,用来为当前元素和文档之间建立连接,常用的是link、a标签。

src会将指向的资源下载并应用到当前文档中,常用的标签有script、img、iframe标签。

2. 作用的结果不同

href是为当前文档和引用资源建立联系;而src是替换当前元素。

3. 浏览器的解析方式不同

href引用的资源,浏览器会将其识别为css文档,进行下载资源并且不会停止对当前文档的处理。当浏览器解析到src时,会暂停其他资源的下载和处理,直接将资源下载,编译,执行完毕,图片和框架也是如此,类似于将所指资源应用到当前内容。

3. cookie、sessionStorage和localStorage之间的区别

  1. cookie数据以字符串的方式存放在客户的浏览器上,服务器能够知道其中的信息。sessionStorage(会话存储)和localStorage(本地存储)是H5新增的存储对象,以对象(key-value)的方式存储在本地。

  2. 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。sessionStorage和localStorage也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

  3. cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。sessionStorage数据仅在当前浏览器窗口关闭前有效,所以不可能持久保存;localStorage始终有效,窗口或浏览器关闭也一直有效,因此用作持久数据,如要删除,可以手动删除。

拓展:cookie和session的区别?

  1. cookie数据保存在客户端,服务器能够知道其中的信息;session数据保存在服务器,客户端不知道其中的信息。

  2. cookie保存的是字符串,session中保存的是对象。

  3. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

  4. session会在一定时间内保存在服务器上。当访问增多会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie。

  5. 所以建议:将登录信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中。

4. 把对象转为数组 let obj = {a:1,b:2,c:3}

let obj = {
    a: 1,
    b: 2,
    c: 3
};
console.log(Object.entries(obj));//[['a', 1], ['b', 2], ['c', 3]]

5. 写出几个经典的this使用场景

    1. 作为对象方法调用

const obj = {
    a: 10,
    b: 0,
    get() {
        return this.a;
    }
};
console.log(obj.get());//10

    2. 作为函数调用

function func() {
    console.log(this); //Window
};
func();

    3. 作为构造函数调用

function Person() {
    this.x = 10;
    console.log(this); //Person {x:10}
};
const per = new Person();
console.log(per.x); //10

    4. 在call或者apply、bind中调用

const obj = {
    x: 10,
};
function func() {
    console.log(this); //{x: 10}
    console.log(this.x); //10
};
func.call(obj);
func.apply(obj);
func.bind(obj)();

6. 如何理解闭包?闭包的优缺点?使用闭包时要注意什么?

什么是闭包?

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另一个函数。

闭包的优缺点

优点:

  • 隐藏变量,避免全局污染 ;

  • 可以读取函数内部的变量。

缺点:

  • 闭包导致变量不会被垃圾回收机制回收,造成内存消耗 ;

  • 不恰当的使用闭包可能会造成内存泄漏的问题。

使用闭包应该注意什么?

由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。因此可以手动解除对匿名函数的引用,以便释放内存。

function func() {
    let n = 22;
    return function () {
        return {
            n: n,
        };
    };
};
//fn接收了一个匿名函数
const fn = func();
//调用函数
console.log(fn());//{n: 22}
console.log(fn().n);//22
//解除对匿名函数的引用,以便释放内存
fn = null;

7. 怎样添加、插入、移除、替换、创建、复制、查找DOM节点

添加:appendChild
插入:insertBefore
移除:removeChild
替换:replaceChild
复制:cloneNode
创建:createElement
查找:
    document.getElementById();
    document.getELementsByClassName();
    document.getElementsByName();
    document.getElementsByTagName();
    document.querySelector();
    document.querySelectorAll();
    document.documentElement();
    documeny.body;

8. 谈一谈你所了解到的垃圾回收机制

垃圾回收器会定期(周期性)找出不再继续使用的变量,然后释放其内存,各个浏览器的周期不同,常用的垃圾回收机制有这两种。

标记清除(常规)

浏览器将所有引用变量加上标记,然后将全局引用的变量以及闭包的标记清除。在执行js代码的时候会进入一个执行环境,当离开当前执行环境时,当前执行环境内标记的变量会被清除,大多数浏览器都是使用这种方式。

引用计数(IE7/8,Netscape Navigator3)

每次引用一个变量,都会在引用计数中+1,如果这个值赋给另一个引用,那么再+1,相反,如果当引用这个值的变量引用了其他的变量,那么就会-1,当引用数量为0时,会被垃圾回收器清除。

引用计数的问题——>(循环引用)

(IE中有一部分不是使用的原生的js对象,使用的是C++模拟的COM对象来模拟,它的垃圾回收机制是使用的引用计数,当产生引用循环时,就会大大占用内存。)

解决办法——>手动解除引用循环

在使用完之后手动将其设置为null,将变量设置为null意味着切断变量与它此前引用的值的联系,当垃圾回收器下次运行,就会删除这些值并回收它们占用的内存

9. 简述Ajax的工作原理

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给 Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

10. 简述浏览器的渲染过程

  1. 解析HTML构建Dom树(Document Object Model,文档对象模型),DOM 是W3C组织推荐的处理可扩展置标语言的标准编程接口。

  2. 构建渲染树,渲染树并不等同于Dom树,因为像head标签 或 display: none这样的元素就没有必要放到渲染树中了,但是它们在Dom树中。

  3. 对渲染树进行布局,定位坐标和大小、确定是否换行、确定position、overflow、z-index等等,这个过程叫"layout" 或 "reflow"

  4. 绘制渲染树,调用操作系统底层API进行绘图操作。

今天的分享就到这里啦~~

如有错误,欢迎随时雅正。

猜你喜欢

转载自blog.csdn.net/weixin_55992854/article/details/121242276