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() 函数用于将文本作为代码运行。在大多数情况下,应该没有必要使用它。


目录
相关文章
|
3月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
63 3
|
3月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
4月前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
62 3
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
35 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
2月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
4月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
45 0
|
4月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
4月前
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码
|
4月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
5月前
|
缓存 JavaScript 前端开发
js高频面试题,整理好咯
中级前端面试题,不低于12k,整理的是js较高频知识点,可能不够完善,大家有兴趣可以留言补充,我会逐步完善,若发现哪里有错,还请多多斧正。