草庐IT

面试题JavaScript基础

默永 2023-03-28 原文

原博客地址

01. 如何开启js严格模式?js严格模式有什么特点?

参考点:js基础知识

参考答案:

// 全局开启
'use stcict'

// 局部开启
function fu(){
  'use strict'
}

/*
  1.全局变量必须先声明
  2.禁止使用with
  3.创建eval作用域
  4.禁止this指向window
  5.函数参数不能重名
*/

// 全局变量必须先声明
let n = 10;
console.log(n);

// 禁止使用with
let obj = { name:'mo' }
with (obj) {
  console.log(name);
}

// eval有单独的作用域
let a = 10;
eval(`let a=5; console.log('in eval',a)`);
console.log(a);

// 禁止this指向window
function fn(a,b){
  console.log(this);
}
fun();

// 函数参数不能重名令
function fn(x,x,y){}
fn(10,20,30);

连环问:想改变函数的this值,如何操作

function fn(a,b){
  console.log(a+b);
}

fn.call(改变的this指向,1,2);
fn.apply(改变的this指向,[1,2]);

// bind不会调用函数,会返回一个新的函数的拷贝
const Fn = fn.bind(改变的this指向,1,2);
Fn();

02. offsetHeight、scrollHeight、clientHeight有什么区别

参考点:盒子模型和JS基础知识

参考答案:

offsetHeight = border + padding + content
scrollHeight = padding + 实际内容大小
clientHeight = padding + content

扩展知识:不要频繁的获取offsetHeight等值,所有DOM操作都很费性能

连环问: 

  • scrollLeft与scrollTop是什么? 

    滚动距离 

  • 如何获取元素距离⻚⾯顶部的距离? 

    offsetParent.scrollTop + xx.scrollTop 

    obj.getBoundingClientRect().top

03. HTMLCollection与NodeList区别?

考察点:js DOM基础知识 

参考答案:

HTMLCollection 是 Element 集合
 obj.children,只包含⼦元素

NodeList 是 Node 集合
 obj.childNodes,包含⽂本、注释、空格、换⾏

DOM是⼀棵树,所有节点都是Node
Node是Element的基类
Element是其他HTMLElement的基类

04. 箭头函数有什么缺点?什么时候不能 使⽤箭头函数?

考察点:js基础知识 

参考答案:

** 箭头函数的this指向父作用域 **

箭头函数有什么缺点
1.没有 arguments
2.无法通过 call、apply、bind 改变 this

不能使用箭头函数的场景
1.对象方法,不能使用 -> this 指向不正确
2.原型方法 __proto__,不能使用 -> this 指向不正确
3.构造函数,不能使用 -> this 指向不正确
4.动态上下文中使用this,不能使用 -> this 指向不正确
5.vue的生命周期和method,不能使用 -> this 指向不正确

05. for..in 与 for..of 有什么区别?

考察点:js基础知识、考察ES6基本功 

参考答案:

for..in 遍历得到key,可以遍历对象,不可以遍历 Set和Map
for..of 遍历得到value,不可以遍历对象,可以遍历 Set 和 Map
[扩展]
可枚举 与 可迭代
for...in ⽤于可枚举的数据:对象、字符串、数组、类数组
for...of ⽤于可迭代的数据:Set、Map
可枚举 Object.getOwnPropertyDescriptors(obj)
 enumerable: true
可迭代 arr[Symbol.iterator]()
 有没有next

扩展知识点:

Map文档

Set文档

06. typeOf 可以判断哪些类型?

考察点:typeOf的使⽤ 

参考答案:

undefined
string
number
boolean
function
object
symbol

07. 阅读代码,填写结果

console.log('我的年龄是' + 18 + 1) // 我的年龄是181
console.log(100 == '100') // true
console.log(0 == '') // true
console.log(0 == false) // true
console.log(false == '') // true
console.log(null == undefined) // true

考察点:隐式类型转换

08. 何时使⽤ == ?何时使⽤ === ?

考察点:编程能⼒ 

参考答案:

eslint Visual Code检查语法插件

除了 if (obj.a == null) 使⽤ == 之外,全部⽤ ===

if (obj.a === null || obj.a === undefined )

09. 阅读代码,填写结果

let a1=10;
let b1=a1;
b1=100;
console.log(a1); // 此时 a1 的值是多少?
let a2={age: 18};
let b2=a2;
b2.age=20;
console.log(a2); // 此时 a2.age 的值是多少?

考察点:值类型与引⽤类型 

参考答案:

【值类型】
赋值后,⼊栈,不会互相⼲扰
常⻅值类型:undefined、string、bumber、boolean、symbol
【引⽤类型】
会互相⼲扰
常⻅引⽤类型:对象{a:10}、数组[1, 2, 3]、null

扩展阅读: Symbol⽂档

10. ⼿写深拷⻉函数

考察点:编程能⼒、递归、原型链

const obj = {
  name: "默永",
  age: 18,
  address: {
    city: "beijing"
  }
  hobby: ["羽毛球","游戏"]
}

function deepClone(obj = {}){
  if(typeof obj !== "object" || obj == null) {
    return obj;
  }
  
  let result;
  if(obj instanceof Array) {
    result = [];
  }else{
    result = {};
  }

  for(let key in obj) {
    if (obj.hasOwnProperty(key)) {  // 判断obj是否有相对应属性
      result[key] = deepClone(obj[key]);
    }
  }

  return result;
}

有关面试题JavaScript基础的更多相关文章

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

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

  2. 软件测试基础 - 2

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

  3. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  4. 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

  5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  6. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  7. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  8. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  9. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  10. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

随机推荐