自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奕玄的个人博客

学习、总结

  • 博客(15)
  • 收藏
  • 关注

原创 JavaScript 函数柯里化

总结:利用闭包的特性,将参数分批次、一一对应的传入原函数中去,并在收集完所有参数后执行最终函数得到结果。

2021-08-30 14:01:19 129

原创 详解 JS 函数的 call、apply 及 bind 方法

都能够改变目标函数执行时内部 this 的指向;方法的第一个参数用于指定函数执行时内部的 this 值;支持向目标函数传递任意个参数;若不向方法的第一个参数传值或者传递 undefined、null,则在 JavaScript 正常模式下,目标函数内部的 this 指向 window 对象,严格模式下,分别指向 undefined、null。

2021-08-29 19:25:43 296

原创 判断 JavaScript 数据类型的方式

总结:typeof 操作符;instanceof 操作符;Object.prototype.toString.call() 方法。

2021-08-27 15:47:55 121

原创 JavaScript 中 new 操作符的原理

总结:创建一个空对象;空对象的内部属性 __proto__ 赋值为构造函数的 prototype 属性;将构造函数的 this 指向空对象;执行构造函数内部代码;返回该新对象。

2021-07-10 21:33:31 142

原创 关于 JavaScript 中 this 的指向

总结:全局环境 ➡️ window;普通函数 ➡️ window 或 undefined;构造函数 ➡️ 构造出来的实例;箭头函数 ➡️ 定义时外层作用域中的 this;对象的方法 ➡️ 该对象;call()、apply()、bind() ➡️ 第一个参数。

2021-07-09 01:33:33 91

原创 两个有序数组如何合并成一个有序数组

我这里考虑的两个数组均是升序排序,当然降序的两个数组进行合并算法是类似的。下面有两段相似的代码,第一段除了返回合并后的有序数组还将这两个有序数组清空了,该算法的思路是始终比较两个数组的首元素大小,然后将小者 shift 出来 push 到结果数组中去,因为总是会将数组首元素较小的那个移出,故不用改变比较数组的索引值,一直固定为 0 就行了。最后不要忘记将长度值大于 0 的数组中的元素移出放置到结...

2019-03-15 21:48:15 3869

原创 书写一个用于验证邮箱的正则表达式

首来看几个合法邮箱的例子:1234@qq.com(纯数字)wang@126.com(纯字母)wang123@126.com(数字、字母混合)wang123@vip.163.com(多级域名)wang_email@outlook.com(含下划线 _)wang.email@gmail.com(含英语句号 .)根据对以上邮箱的观察,可将邮箱分为两部分(“@”左边和右边部分)来进行分析...

2019-03-12 20:52:13 2393

原创 对数组中的数字 1 和 2 进行排序,使得数字 1、2 分别位于前、后部分

问题描述:假设某个数组中只有数字 1 和 2,进行排序,使得数字 1 位于数组前部分,数字 2 位于后部分。这道算法题其实不是很难,使用各种排序算法应该都能解出,但是若要考虑性能问题,那就得选择一种算法复杂度最低的解法。这里我使用双指针的方法来解答该题,时间复杂度为 O(n)。解法步骤(1)设置一个头指针、一个尾指针,头指针首先指向数组的第一个元素(索引为 0),而尾指针则指向数组的最后...

2019-03-11 21:47:21 1581

原创 获取 url 并解析生成包含查询串参数的对象

页面的 URL 地址可以通过 location.url 取得,举个例子,比如 https://www.example.com/path?name1=value1&name2=value2#top这时根据 URL 中的 ?、# 和 & 特征字符,充分利用好 split() 字符串分割方法将整个 URL 逐渐剥离成以查询串参数组成的数组,最后还是使用 split() 方法根据 = 字...

2019-03-09 20:43:05 221

原创 一张图理解 JS 中的原型链

下图表示了构造函数、原型、实例对象之间的关系:上图是根据下面的一些知识点和总结画出来的:(1)所有的函数(不管是构造函数还是普通函数)都默认有一个 prototype 属性,表示该函数的原型对象,且该原型对象都默认有一个 constructor 属性,这个属性指向拥有该原型对象的函数,如下有几个例子:Object === Object.prototype.constructor; // ...

2019-03-08 19:58:44 195

原创 找出数组中第 k 大的数字及其出现次数

这是前端面试过程中遇到的一道算法题,虽说难度不大,但是也有些细节的地方需要仔细考虑。比如说数组 [1, 2, 4, 4, 3, 5],第 2 大的数字是 4,出现了 2 次。下面以这个为例展开算法的讲解。先说说大体的思路,然后再考虑一些细节性的问题。既然涉及到数字大小的问题,那就要对给定数组进行排序,题目要求“第 k 大”的数字,故选择降序的方式更有利于后面的查找;重点来了,需要遍...

2019-03-07 16:04:17 1492

原创 怎么实现深拷贝

注意点进行拷贝操作时,须加以区分引用类型和基本数据类型的值,且拷贝引用类型的值时,不是简简单单的复制其保存在栈中的指针,(即浅拷贝)而是应该复制其存储在堆中的数据。解题思路(1)方法一:分别对数组、对象、基本数据类型值进行判断、考虑,使用递归的方式复制值(2)方法二:利用了 JSON.parse()、JSON.stringify() 这两个方法实现深拷贝代码/* 方...

2019-03-07 16:01:50 1242

原创 实现数组的随机排序(含洗牌算法)

有时,我们需要将一个数组内的元素顺序进行打乱,达到随机排序的目的。首先想到的是 Math.random() 方法结合数组的 sort() 方法。Math.random() 结合 sort() 方法Math.random() 方法用于产生一个介于 0 和 1 之间的随机数(含 0 但不包括 1)。数组的 sort() 方法可以有两种用法:用法一:在不传入可选的函数参数时,将会对数组的每一个元...

2019-03-07 15:59:55 686

原创 使用 JS 获取文件扩展名

给你一个文件名,你能获得它的扩展名吗?这里面主要考察的是对正则表达式的熟悉程度。我们先对文件名做个分析,扩展名是在文件名的最后,且以 . 开头。如此扩展名便有了两个特点,针对第一个特点,我们用 $ 元字符限定扩展名在整个文件名的最后;对于第二个特点,以 \. 表示扩展名的开头,而用 [^\.]+ 匹配扩展名的名字部分。其中因为 . 是元字符,故予以转义;^ 元字符放置于 . 字符之前表示匹配...

2019-03-07 15:57:05 1840

原创 如何实现数组去重?

要将数组中重复的值剔除,常规解法使用 ES5 中数组的一些 API 即可,而更简便的方法可以结合使用 ES6 中的扩展运算符和 Set 数据结构。下面给出 4 种解法:方法一,使用 splice 方法删除重复的元素function normalize (arr) { if (arr && Array.isArray(arr)) { var len = arr....

2019-03-07 15:54:35 2150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除