14万字 | 400多道JavaScript 面试题及详细答案07(建议收藏)

简介: 14万字 | 400多道JavaScript 面试题及详细答案07(建议收藏)

130.for循环的优缺点是什么?


for 循环是 JavaScript 中常用的迭代语法。它有利有弊


优点


适用于各种环境

您可以使用 break 和 continue 流控制语句

缺点


太冗长

Imperative(命令式编程)

您可能会面临一次一次的错误



131.你如何在javascript中显示当前日期?


您可以使用new Date()生成包含当前日期和时间的新 Date 对象。例如,让我们以 mm/dd/yyyy 显示当前日期


var today = new Date();
 var dd = String(today.getDate()).padStart(2, '0');
 var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
 var yyyy = today.getFullYear();
 today = mm + '/' + dd + '/' + yyyy;
 document.write(today);



132.你如何比较两个日期对象?


您需要使用 date.getTime() 方法来比较日期值而不是比较运算符(==、!=、=== 和 !== 运算符)


var d1 = new Date();
 var d2 = new Date(d1);
 console.log(d1.getTime() === d2.getTime()); //True
 console.log(d1 === d2); // False



133.你如何检查一个字符串是否以另一个字符串开头?


您可以使用 ECMAScript 6 的String.prototype.startsWith()方法来检查一个字符串是否以另一个字符串开头。但并非所有浏览器都支持它。让我们看一个例子来看看这个用法,


"Good morning".startsWith("Good"); // true

"Good morning".startsWith("morning"); // false


134.你如何在javascript中修剪字符串?


JavaScript 为字符串类型提供了一种修剪方法来修剪出现在字符串开头或结尾的任何空格。


"  Hello World   ".trim(); //Hello World

1

如果您的浏览器(<IE9)不支持此方法,那么您可以使用下面的 polyfill。


if (!String.prototype.trim) {
     (function() {
         // 确保我们修剪 BOM 和 NBSP
         var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
         String.prototype.trim = function() {
             return this.replace(rtrim, '');
         };
     })();
 }


135.你如何在javascript中添加一个键值对?


向对象添加新属性有两种可能的解决方案。让我们以一个简单的对象来解释这些解决方案。


var object = {

    key1: value1,

    key2: value2

};


使用点表示法:当您知道属性的名称时,此解决方案很有用


object.key3 = "value3";

1

使用方括号表示法:当属性的名称是动态确定的时,此解决方案很有用。


obj["key3"] = "value3";

1


136.‘!–’ 符号是否表示一个特殊运算符?


不,不是特殊运算符。但它是 2 个标准运算符的组合


逻辑否定(!)

前缀递减 (–)

首先,该值减一,然后测试它是否等于零,以确定真/假值。


137.你如何为变量分配默认值?


您可以使用逻辑或运算符 || 在赋值表达式中提供默认值。 语法如下所示,


var a = b || c;

1

根据上面的表达式,只有当 ‘b’ 为假(如果为空、假、未定义、0、空字符串或 NaN)时,变量 ‘a’ 将获得 ‘c’ 的值,否则 ‘a’ 将获得’b’ 的值。


138.你如何定义多行字符串?


您可以使用“\”字符后跟行终止符来定义多行字符串文字。


var str = "This is a \

very lengthy \

sentence!";


但是如果你在 ‘’ 字符后面有一个空格,代码看起来完全一样,但它会引发一个 SyntaxError。



139.什么是app shell model?


application shell (或者是 app shell)架构是构建渐进式 Web 应用程序的一种方式,该应用程序可以可靠且即时地加载到用户的屏幕上,类似于您在本机应用程序中看到的内容。这对于在没有网络的情况下快速将一些初始 HTML 显示到屏幕上很有用。



140.我们可以为函数定义属性吗?


是的,我们可以为函数定义属性,因为函数也是对象。


fn = function(x) {
    //函数代码在这里
 }
 fn.name = "Haiyong";
 fn.profile = function(y) {
   //配置文件代码在这里
 }



141.找到函数期望的参数数量的方法是什么?


您可以使用function.length语法来查找函数所需的参数数量。让我们举一个sum计算数字和的函数的例子,


function sum(num1, num2, num3, num4){
     return num1 + num2 + num3 + num4;
 }
 sum.length // 4 是预期的参数数量。



142.什么是 polyfill?


polyfill 是一段 JS 代码,用于在本身不支持它的旧浏览器上提供现代功能。例如,Silverlight 插件 polyfill 可用于模拟 Microsoft Internet Explorer 7 上的 HTML Canvas 元素的功能。



143.什么是 break 和 continue 语句?


break 语句用于“跳出”循环。即,它中断循环并在循环后继续执行代码。


for (i = 0; i < 10; i++) {

  if (i === 5) { break; }

  text += "Number: " + i + "<br>";

}


continue 语句用于“跳过”循环中的一次迭代。即,如果出现指定条件,它会中断一次迭代(在循环中),并继续循环中的下一次迭代。


for (i = 0; i < 10; i++) {

    if (i === 5) { continue; }

    text += "Number: " + i + "<br>";

}


144.什么是js标签?


label 语句允许我们在 JavaScript 中命名循环和块。然后我们可以使用这些标签稍后引用代码。例如,下面带有标签的代码避免在数字相同时打印数字,


var i, j;
 loop1:
 for (i = 0; i < 3; i++) {
    loop2:
    for (j = 0; j < 3; j++) {
       if (i === j) {
          continue loop1;
       }
       console.log('i = ' + i + ', j = ' + j);
    }
 }
 // 输出:
 //   "i = 1, j = 0"
 //   "i = 2, j = 0"
 //   "i = 2, j = 1"


145.将声明放在首位有什么好处?


建议将所有声明保留在每个脚本或函数的顶部。这样做的好处是,


1.提供更清晰的代码

2.它提供了一个查找局部变量的地方

3.轻松避免不需要的全局变量

4.它减少了不需要的重新声明的可能性



146.初始化变量有什么好处?


由于以下好处,建议初始化变量,


1.它提供了更清晰的代码

2.它提供了一个初始化变量的地方

3.避免代码中的未定义值



147.创建新对象的建议是什么?


建议避免使用new Object(). 相反,您可以根据它的类型初始化值来创建对象。


1.分配 {} 而不是 new Object()

2.分配 “” 而不是 new String()

3.分配 0 而不是 new Number()

4.分配 false 而不是 new Boolean()

5.分配 [] 而不是 new Array()

6.分配 /()/ 而不是 new RegExp()

7.赋值 function (){} 而不是 new Function()


您可以将它们定义为示例,


var v1 = {};

var v2 = "";

var v3 = 0;

var v4 = false;

var v5 = [];

var v6 = /()/;

var v7 = function(){};



148.你如何定义 JSON 数组?


JSON 数组写在方括号内,数组包含 javascript 对象。例如,用户的 JSON 数组如下所示,


"users":[
   {"firstName":"Haiyong", "lastName":"Abrahm"},
   {"firstName":"Anna", "lastName":"Smith"},
   {"firstName":"Shane", "lastName":"Warn"}
 ]


149.你如何生成随机整数?


您可以使用 Math.random() 和 Math.floor() 来返回随机整数。例如,如果要生成 1 到 10 之间的随机整数,则乘法因子应为 10,


Math.floor(Math.random() * 10) + 1;     // 返回一个从 1 到 10 的随机整数

Math.floor(Math.random() * 100) + 1;     // 返回一个从 1 到 100 的随机整数


注意: Math.random() 返回一个介于 0(含)和 1(不含)之间的随机数



150.你能写一个随机整数函数来打印范围内的整数吗?


是的,您可以创建一个适当的随机函数来返回一个介于 min 和 max 之间的随机数(均包括在内)


function randomInteger(min, max) {

  return Math.floor(Math.random() * (max - min + 1) ) + min;

}

randomInteger(1, 100); // 返回一个从 1 到 100 的随机整数

randomInteger(1, 1000); // 返回一个从 1 到 1000 的随机整数



151.什么是tree shaking(摇树)?


tree shaking(摇树)是消除死代码的一种形式。这意味着在构建过程中未使用的模块不会包含在包中,因此它依赖于 ES2015 模块语法的静态结构,(即导入和导出)。最初这已被 ES2015 模块捆绑器推广rollup。




152.tree shaking(摇树)需要什么?


Tree Shaking 可以显着减少任何应用程序中的代码大小。即,我们通过网络发送的代码越少,应用程序的性能就越高。例如,如果我们只想使用 SPA 框架创建一个“Hello World”应用程序,那么它大约需要几 MB,但是通过 treeShaking,它可以将大小降低到几百 KB。摇树在 Rollup 和 Webpack 打包器中实现。




153.是否推荐使用 eval?


不推荐,它允许运行导致安全问题的任意代码。我们知道 eval() 函数用于将文本作为代码运行。在大多数情况下,应该没有必要使用它。


目录
相关文章
|
13天前
|
前端开发 JavaScript 网络协议
前端最常见的JS面试题大全
【4月更文挑战第3天】前端最常见的JS面试题大全
33 5
|
2天前
|
JavaScript 前端开发 测试技术
「一劳永逸」送你21道高频JavaScript手写面试题(上)
「一劳永逸」送你21道高频JavaScript手写面试题
19 0
|
1月前
|
设计模式 JavaScript 前端开发
最常见的26个JavaScript面试题和答案
最常见的26个JavaScript面试题和答案
42 1
|
1月前
|
存储 JavaScript 前端开发
【JavaScript】面试手撕浅拷贝
引入 浅拷贝和深拷贝应该是面试时非常常见的问题了,为了能将这两者说清楚,于是打算用两篇文章分别解释下深浅拷贝。 PS: 我第一次听到拷贝这个词,有种莫名的熟悉感,感觉跟某个英文很相似,后来发现确实Copy的音译,感觉这翻译还是蛮有意思的
45 6
|
1月前
|
JavaScript 前端开发
【JavaScript】面试手撕节流
上篇我们讲了防抖,这篇我们就谈谈防抖的好兄弟 -- 节流。这里在老生常谈般的提一下他们两者之间的区别,顺带给读者巩固下。
51 3
|
2月前
|
前端开发 JavaScript UED
【JavaScript】面试手撕防抖
防抖: 首先它是常见的性能优化技术,主要用于处理频繁触发的浏览器事件,如窗口大小变化、滚动事件、输入框内容改变等。在用户连续快速地触发同一事件时,防抖机制会确保相关回调函数在一个时间间隔内只会被执行一次。
36 0
|
2月前
|
前端开发 JavaScript 算法
【JavaScript】面试手撕数组排序
这章主要讲的是数组的排序篇,我们知道面试的时候,数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题,大概可以分为如下
24 2
|
2月前
|
JavaScript 前端开发 索引
【JavaScript】面试手撕数组原型链(易)
续借上文,这篇文章主要讲的是数组原型链相关的考题,有些人可能会纳闷,数组和原型链之间有什么关系呢?我们日常使用的数组forEach,map等都是建立在原型链之上的。举个🌰,如我有一个数组const arr = [1,2,3]我想要调用arr.sum方法对arr数组的值进行求和,该如何做呢?我们知道数组没有sum函数,于是我们需要在数组的原型上定义这个函数,才能方便我们调用,具体代码如下。接下来我们就是采用这种方式去实现一些数组常用的方法。
39 6
|
2月前
|
JavaScript 前端开发
【JavaScript】面试手写题精讲之数组(上)
该专题主要是讲解我们在面试的时候碰到一些JS的手写题, 确实这种手写题还是比较恶心的。有些时候好不容易把题目写出来了,突然面试官冷不丁来一句有没有更优的解法,直接让我们僵在原地。为了解决兄弟们的这些困扰,这个专题于是就诞生啦。我们会将一些常见的不是最优解的答案作为对比,方便大家更好理解。
37 3
|
3月前
|
存储 人工智能 JavaScript
【利用AI刷面试题】AI:十道JavaScript面试题巩固一下知识
【利用AI刷面试题】AI:十道JavaScript面试题巩固一下知识