大涛子

Results 99 issues of 大涛子

## 数组扁平化 **数组的扁平化**,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 1.递归循环: ```js function flatten(arr) { var result = []; for (var i = 0, len = arr.length; i < len; i++) { if (Array.isArray(arr[i])) {...

JavaScript 专题系列

## 如何求数组的最大值和最小值 JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: ```js Math.max([value1[,value2, ...]]) ``` 值得注意的是: - 如果有任一参数不能被转换为数值,则结果为 NaN。 - max 是 Math 的静态方法,所以应该像这样使用:`Math.max()`,而不是作为 Math 实例的方法 (简单的来说,就是不使用 new ) - 如果没有参数,则结果为 **-Infinity** (注意是负无穷大) **循环**: ```js...

JavaScript 专题系列

## 模拟 jQuery 的 extend **extend** 的用法:合并两个或者更多的对象的内容到第一个对象中。 ```js jQuery.extend( [deep], target, object1 [, objectN ] ) ``` - **deep**,布尔值,如果为 true,进行深拷贝;false 做浅拷贝,target 就往后移动到第二个参数 - **target**,表示要拓展的目标,我们就称它为目标对象吧。 - 后面的参数,都传入对象,内容都会复制到目标对象中,我们就称它们为待复制对象吧。 ```js var toString =...

JavaScript 专题系列

## 前言 > 浅拷贝技巧:数组`concat slice`,对象`Object.assign()`等; > 深拷贝技巧:`JSON.parse(JSON.stringify(arr1))`。 ## 数组的浅拷贝 如果数组元素是基本类型,就会拷贝一份,互不影响,而如果是对象或者数组,就会只拷贝对象和数组的引用,这样我们无论在新旧数组进行了修改,两者都会发生变化。 我们把这种复制引用的拷贝方法称之为浅拷贝,与之对应的就是深拷贝,深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。 比如,数组的一些方法:`concat、slice`: ```js var arr = ["old", 1, true, null, undefined]; var newArr = arr.concat(); newArr.shift(); console.log(arr); // [ 'old',...

JavaScript 专题系列

## typeof 最新的 ECMAScript 标准定义了 8 种数据类型: 7 种原始类型: - Boolean - Null - Undefined - Number - String - Symbol - BigInt 和 Object 使用 typeof 检测类型如下: ```js "Number";...

JavaScript 专题系列

> 数组去重,老生常谈,把学习到的多种方式进行归纳总结 ## 双层循环 第一种: ```js function unique(arr) { var result = []; for (var i = 0, arrLen = arr.length; i < arrLen; i++) { for (var j =...

JavaScript 专题系列

## 防抖 Debounce **防抖**的原理:你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行。 ```js function debounce(func, wait, immediate) { var timer, result; var debounced = function() { var context = this; var...

JavaScript 专题系列

## var、let 及 const 区别 - **函数提升**优先于**变量提升**,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部 - var 存在提升,我们能在声明之前使用。let、const 因为**暂时性死区**的原因,不能在声明前使用 - var 在全局作用域下声明变量会导致变量挂载在 **window** 上,其他两者不会 - let 和 const 作用基本一致,但是后者声明的变量不能再次赋值 ## 为什么要使用模块化 使用模块化可以给我们带来以下好处: - 解决命名冲突 - 提供复用性 - 提高代码可维护性...

前端面试

> 主要有:isArray reduce flat forEach some every filter map 等 Array 方法。 ## Array.isArray 实现 可以通过 **toString()** 来获取每个对象的类型。为了每个对象都能通过 `Object.prototype.toString()` 来检测,需要以 `Function.prototype.call()` 或者 `Function.prototype.apply()` 的形式来调用,传递要检查的对象作为第一个参数。 ```js Array.myIsArray = function(o) { return...

手写系列