Web前端面试题及答案--JavaScript

本文精选了一系列Web前端开发面试题目,涵盖JavaScript基础知识、运算规则、类型检测等方面,并深入解析每道题目的答案与背后的原理。

Web前端面试题及答案–JavaScript篇

    随着互联网行业蓬勃兴起,Web前端开发已经成为互联网行业必不可缺的一个岗位,进入公司从事Web前端开发前首先要通过面试这道“难关”,这篇博文便会和大家共同分享一些曾出现过的面试题。

  • 写出程序运行结果
for(i=0, j=0; i<10, j<6; i++, j++){
    k = i + j;
}
    console.log(k);   //10

    for循环中条件语句参考   ;   前紧挨的条件。

  • 写出运算结果
    alert('5'+3);                       //53
    console.log(typeof('5'+3))          //string

    alert('5'+'3');                     //53
    console.log(typeof('5'+'3'));       //string

    alert('5'-3);                       //2
    console.log(typeof('5'- 3));        //number

    alert('5'-'3');                     //2
    console.log(typeof('5'-'3'));       //number

    alert('5a'-'3');                    //NaN
    console.log(typeof('5a' - '3'));    //number

    运算中包含字符串时,+ 表示拼接符、- 表示运算符;
    字符串由数字和字母组成时,运算结果为NaN。

  • 精度问题
var  n  =  0.4,
     m  =  0.3,
     i  =  0.2,
     j  =  0.1;
alert((n  -  m)  ==  (i  -  j));    //false
alert((n - m)  ==  0.1);            //false
alert((i - j) == 0.1);              //true

    JS 精度不能精确到 0.1。

  • 判断结果(精度问题)
alert(0.4*0.2 == 0.08);     //false

     0.4 * 0.2 值为 0.08000000000000002,大于 0.08

  • 检测变量类型
function checkStr1(str){
    return str ='string';
}
    console.log(checkStr1('string'));    //string

function checkStr2(str){
    return str =='string';
}
    console.log(checkStr2('string'));    //true

function checkStr3(str){
    return str ==='string';
}
    console.log(checkStr3('string'));    //true

     = 赋值;
     == 用于比较两者是否相等,比较值相等,在比较的时候可以自动转换数据类型;
     === 用于比较两者是否完全相等,比较值和类型都相等,在比较时不会进行数据类型转换。

  • 检测 | 的作用
console.log( 8 | 1 );       //9

     | 将数字运算转换成二进制并相加: 1000 + 1 = 1001
    再将二进制转换成数字:1001 = 9

  • 双向非测试
var bool = !!2; 
alert(bool);                //true

     双向非操作可以把字符串和数字转换为布尔值。

  • 运算测试
    var a;
    var b = a * 0;
    var c;
    if (b == b) {    //不成立,执行else中的语句
        console.log(b * 2 + "2" - 0 + 4);
    } else {
        console.log(!b * 2 + "2" - 0 + 4);      //26
    }   

    此处运算有些绕,需要一步一步理解:
    b是NaN,因为: 字母*数字  得到NaN;
    !b得到的是true;
    !b*2得到2;
    !b*2 + “2”得到22,+ 作用为数字与字符拼接符;
    !b*2 + “2” - 0得到22,- 作用为数字与数字运算符 ;
    !b * 2 + “2” - 0 + 4即22 + 4 得26;

  • 运算测试
<script>
    var a = 1;
</script>
<script>
    var a;
    var b = a * 0;
    if (b == b) {
        console.log(b * 2 + "2" - 0 + 4);    //6
    } else {
        console.log(!b * 2 + "2" - 0 + 4);
    }

    不要把注意力只关注在console.log,别忽视了前面给出的条件:var a = 1; 结果为 6。

  • ++测试
var a = 10,
    b = 20,
    c = 4;
console.log( ++a+b+c++ );   //35

    题中++a 得到自增值 11;
    题中c++ 得到原值 4;
    ++在左先自增再赋值,++在右先赋值再自增。

  • 下列JavaScript代码执行后,iNum的值是多少?
var iNum = 0;
for(var i = 1; i< 10; i++){
    if(i % 5 == 0){
        continue;
    }
    iNum++;
}
console.log(iNum);      //8

    for循环表示:i值为1~9,if判断表示:i≠5,所以iNum 得 8 。

    在参加面试前,我们要做很多面试题,如果面试时面试题有了改动,那么背题、记答案得到的结果肯定是错的;理解做题既能增强自己的面试技巧,又能重温知识点,所以,面试题要理解着做。

### Web前端相关面试题及其答案 #### 1.JavaScript 的理解? JavaScript 是一种动态编程语言,具有弱类型特征,主要用于浏览器端开发。它支持事件驱动、函数优先以及异步处理机制。JavaScript 可分为三个部分:ECMAScript(核心语法)、DOM(文档对象模型)和 BOM(浏览器对象模型)。其主要特点包括跨平台兼容性、丰富的库生态以及强大的社区支持[^1]。 #### 2. 下列代码输出的值是什么? 假设代码如下: ```javascript let a = 1; function test() { console.log(a); } test(); ``` 由于 `a` 被声明在全局作用域下,在函数内部可以访问到全局变量 `a`,因此输出的结果为 `1`[^3]。 #### 3. 将下列代码改写为依次输出 0 到 9? 原代码可能是一个简单的循环结构,以下是实现逐秒打印的方法: ```javascript for (let i = 0; i < 10; i++) { setTimeout(() => { console.log(i); }, i * 1000); // 延迟时间设置为每秒增加 } ``` #### 4. 如何区分数组对象、普通对象和函数对象? 可以通过内置方法 `Array.isArray()` 来检测是否为数组;对于普通对象,可以直接使用 `typeof obj === 'object' && !Array.isArray(obj)` 进行判断;而函数对象则可通过 `typeof func === 'function'` 实现识别。 #### 5. 面向对象与面向过程的区别? - **面向对象**强调的是类的概念,通过封装数据成员和行为成员形成独立的对象实体,便于维护扩展。 - **面向过程**更关注解决问题的具体步骤流程描述,通常按照顺序逐步完成任务目标。 #### 6. 面向对象的三大基本特性? 继承(Inheritance)、封装(Encapsulation) 和 多态(Polymorphism)。 #### 7. XML 和 JSON 的区别? | 特性 | XML | JSON | |--------------|------------------------------|-----------------------------| | 数据格式 | 文本 | 文本 | | 易读性 | 较差 | 更好 | | 解析效率 | 较低 | 较高 | | 支持的数据类型 | 字符串为主 | 数字、布尔值等多种类型 | #### 8. Web Worker 和 WebSocket 的差异? - **Web Worker**: 主要用于后台运行脚本而不影响页面性能表现的技术手段之一; - **WebSocket**: 提供了一个持久连接通道使得服务器能够实时推送消息给客户端。 #### 9. JavaScript 中垃圾回收的主要方法? 主要包括引用计数法(reference counting garbage collection) 和标记清除算法(mark-and-sweep algorithm),其中后者更为常用并有效解决了者存在的循环引用问题[^1]。 #### 10. 使用 new 操作符创建实例的过程? 当调用new运算符时会发生四件事情: 1. 创建一个新的空对象。 2. 设置这个新对象的原型(__proto__)指向构造器函数prototype属性所指代的那个对象。 3. 执行构造器函数中的代码, 并将this绑定至新建出来的那个对象上. 4. 返回该新生成的对象如果构造器显式返回另一个非null对象,则最终结果将是那个被返回的对象而不是默认的新建对象[^1]。 #### 11. JS 延迟加载的方式有哪些? 常见的几种方式包括但不限于defer/async 属性应用于script标签内联或者外部文件链接处;动态插入 script 元素节点等等[^1]。 #### 12. WEB 应用从服务端主动推送到客户端的方式都有哪些? 主要有轮询(polling), 长轮询(long polling), Server-Sent Events(SSEs) ,以及最高效的 WebSocket 技术等几种主流方案可供选择[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值