前端面试必备:深入解析JS闭包与字符串操作

需积分: 34 3 下载量 178 浏览量 更新于2024-09-10 收藏 14KB DOCX 举报
前端面试宝典是一份专为求职者准备的关于JavaScript前端技术的面试指南,其中包含了多道经典面试题及其解析。本文将深入探讨几个关键知识点,帮助考生提升对JavaScript的理解和应对面试的能力。 1. **JS闭包**: 闭包是JavaScript中的一个重要概念,它允许函数访问并操作其外部作用域中的变量,即使该函数在外部作用域已经执行完毕。题目中的代码示例通过一个立即执行的匿名函数(IIFE)展示了闭包的用法。当`g()`返回`false`时,由于条件`if(g()&&[]==![])`的逻辑判断,闭包内的`f`被重新赋值为`return false;`。最后执行`alert(f())`会返回`false`,这是因为闭包捕获了原始`f`函数的引用,而不是其内部重新定义的新函数。 2. **字符串截取**: 题目要求从字符串"abcdefg"中截取最后三个字符。通过JavaScript的`substring`方法,获取从指定索引到字符串结束的所有字符。代码片段通过`myvalue.substring(myvalue.length-3,myvalue.length)`实现,输出结果为"efg"。 3. **数据类型与比较**: - `typeof(null)` 返回的是 "object",这是一个历史遗留问题,因为`null`在JavaScript早期被设计为对象的一种特殊情况。 - `typeof(undefined)` 为 "undefined",表示未定义的变量或函数调用。 - `typeof(NaN)` 返回 "number",尽管NaN(Not-a-Number)是一个特殊的数值类型,但它的值不等于任何数字,包括自身。 - 对于NaN的比较,`NaN == NaN` 和 `NaN == undefined` 的结果都是 `false`,因为NaN与任何值都不相等,包括自身。 4. **运算符和变量类型转换**: `str++` 是字符串的自动递增操作,执行后字符串变成 "124abc",但由于`typeof`检查的是值的类型,所以`typeof(str++)`返回 "number"。接着,`alert(str)` 显示原始字符串 "123abc",因为 `str++` 的操作只改变了字符串内容,而 `alert` 引用的是原始字符串。 5. **日期处理函数**: `DateDemo` 函数创建了一个新的Date对象,并将其月份和日附加到初始字符串`s`中。题目没有提供完整代码,但可以假设`getMonth()`返回0-11的月份,加上`/`,今天的日期可能是如 "06/30"(系统日期假设为今天),具体取决于当前日期。 以上知识点覆盖了JavaScript语言的基础特性,包括闭包、字符串操作、数据类型判断、算术运算以及日期处理。理解这些概念对于前端开发者来说至关重要,不仅有助于面试表现,还能提高日常开发中的代码质量。
2021-03-27 上传
1、 JavaScript 的基本类型有哪些?引用类型有哪些?null 和 undefined 的区别?(必 会) 76 2、如何判断 JavaScript 的数据类型?(必会) JavaScript 数据类型一共有 7 种: 77 2、 创建对象有几种方法(必会) 79 4、简述创建函数的几种方式? (必会) 79 5、Javascript 创建对象的几种方式? (必会) 79 6、请指出 JavaScript 宿主对象和原生对象的区别?(必会) 81 7、 JavaScript 内置的常用对象有哪些?并列举该对象常用的方法?(必会) 82 8、 === 和 ==的区别?(必会) 87 9、 null,undefined 的区别(必会) 88 10、JavaScript 中什么情况下会返回 undefined 值?(必会) 88 11、如何区分数组和对象?(必会) 89 12、怎么判断两个对象相等?(必会) 89 13、列举三种强制类型转换和两种隐式类型转换?(必会) 91 14、 JavaScript 中怎么获取当前日期的月份?(必会) 91 15、 什么是类数组(伪数组),如何将其转化为真实的数组?(必会) 92 16、如何遍历对象的属性?(必会) 92 17、src 和 href 的区别是?(必会) 94 18、如何使用原生 JavaScript 给一个按钮绑定两个 onclick 事件?(必会) 95 19、 如何在 JavaScript 中比较两个对象?(必会) 95 20、JavaScript 中的作用域、预解析与变量声明提升? (必会) 97 21、变量提升与函数提升的区别?(必会) 99 22、 什么是作用域链?(必会) 99 23、如何延长作用域链?(必会) 99 23、 判断一个值是什么类型有哪些方法?(必会) 100 25、JavaScript 变量按照存储方式区分为哪些类型,并描述其特点?(必会) 100 26、如何实现数组的随机排序?(必会) 100 27、 Function foo() {}和 var foo = function() {}之间 foo 的用法上的区别?(必会) 101 28、索引有哪几种类型,有什么区别?(了解) 102 29、简述 Array.form 和 Array.of 的使用及区别?(了解) 103 30、根据你的理解,请简述 JavaScript 脚本的执行原理(了解) 104 WebAPI 105 1、 什么是 dom?(必会) 105 2、dom 是哪种基本的数据结构?(必会) 105 3、 dom 操作的常用 api 有哪些?(必会) 105 4、 dom 节点的 Attribute 和 Property 有何区别?(必会) 106 5、dom 结构操作怎样添加、移除、移动、复制、创建和查找节点?(必会) 106 6、dom 事件的级别?(必会) 107 7、dom 事件模型?(必会) 107 8、dom 事件流?(必会) 107 9、什么是事件冒泡,它是如何工作的?如何阻止事件冒泡?(必会) 108 10、JavaScript 动画和 CSS3 动画有什么区别?(必会) 108 11、event 对象的常见应用?(必会) 109 12、自定义事件/ 模拟事件?(必会) 109 13、通用事件绑定/ 编写一个通用的事件监听函数?(必会) 110 14、dom 和 bom 的区别(必会) 111 15、事件三要素(必会) 111 16、事件执行过程(必会) 111 17、获取元素位置(必会) 112 18、封装运动函数(必会) 112 19、绑定事件和解除事件的区别(必会) 113 20、谈谈事件委托的理解?(必会) 114 21、 JavaScript 中的定时器有哪些?他们的区别及用法是什么?(必会) 114 22、比较 attachEvent 和 addEventListener?(必会) 115 23、document.write 和 innerHTML 的区别?(必会) 115 24、 什么是 window 对象?什么是 document 对象?(必会) 116 25、Js 拖动的原理?(必会) 118 26、描述浏览器的渲染过程,DOM 树和渲染树的区别(必会) 119 27、dom 树和 render 树之间的关系?(高薪常问) 119 28、获取到页面中所有的 CheckBox 怎么做(不适用第三方框架)?(高薪常问) 119 29、 简单说一下页面重绘和回流?(高薪常问) 119 30、如何最小化重绘(repaint)和回流(reflow)(高薪常问) 120 31、Js 延迟加载的方式有哪些?(了解) 120 32、IE 与