
JavaScript学习笔记
阅读JavaScript相关书籍,提取总结重点知识
奋斗中的小余
一个正在奋斗的大学生。喜欢自学,学习时间大部分都花在b站上。正在往两个方向发展:1.web全栈开发 2.影视动画后期。平时也研究摄影摄像。现在正在不断学习的过程中。非常愿意和一些志同道合的朋友交流。
展开
-
JavaScript-ES6 Symbol的基本使用
JavaScript-ES6 Symbol的基本使用ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。symbol值能作为对象属性的标识符;这是该数据类型仅有的目的Symbol 特点:Symbol 的值是唯一的,用来解决命名冲突问题Symbol 值不能与其他数据进行运算Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。不支持语法:“new Symbol()”Symbol原创 2021-12-16 12:36:13 · 910 阅读 · 1 评论 -
JavaScript中实现浅拷贝与深拷贝最详解(多种版本实现,轻松解决面试题)
JavaScript中实现浅拷贝与深拷贝最详解(多种版本实现,轻松解决面试题)浅拷贝很简单,因为它只涉及浅层的元素,所以一个循环直接 “=” 号 赋值就能实现。深拷贝的实现就有点难度了,也是面试题常考的,因为它涉及的元素的深度不一,只要要拷贝的对象或数组内的子元素、子子元素、子子子元素… 再是对象或数组的话,就要再进行拷贝处理。所以深拷贝的实现方法也是很多的,下面将一 一讲解各种方法存在的问题和优化及其实现代码。1. 浅拷贝只进行浅层拷贝,相当于拷贝出来的对象或数组的属性都是被拷对象用 “=原创 2021-12-14 00:27:23 · 429 阅读 · 0 评论 -
JavaScript栈数据结构算法-大厂面试题
JavaScript栈数据结构算法-大厂面试题题目:试编写"智能重复" smartRepeat函数,实现:- 将 3[abc] 变为abcabcabc- 将 3[2[a]2[b]] 变为aabbaabbaabb- 将2[10[a]3[b]2[1[c]5[d]]] 变为aaaaaaaaaabbbcdddddcdddddaaaaaaaaaabbbcdddddcddddd- 以此类推......不用考虑输入字符串是非法的情况,比如:- 2[a3[b]] 是错误的,应该补应一个1,即2[1[a]原创 2021-12-08 18:52:21 · 790 阅读 · 0 评论 -
JavaScript栈数据结构算法思想
JavaScript栈数据结构算法思想栈的介绍栈(stack)又名堆栈,它是一种运算受限的线性表,仅在表尾能进行插入和删除操作。这一端被称为栈顶,相对的另一端被称为栈尾。向一个栈中插入一个元素又称作进栈、入栈或压栈;从一个栈删除元素又称作出栈或退栈。后进先出(LIFO)特点:栈中的元素,最先进栈的必定最后出栈,后进栈的一定会先出栈。JavaScript中,栈可以用数组模拟。需要限制数组只能使用push()和pop()方法,不能使用unshift()和shift()方法。即为,数组尾就是栈顶。原创 2021-12-08 00:12:52 · 660 阅读 · 0 评论 -
JavaScript函数的节流与防抖
JavaScript函数的节流与防抖函数的 节流和防抖 可以有效的防止,函数频繁无意义的执行。至于选用节流还是防抖,得看具体的应用场景。/*----------------------------------防抖函数---------------------------------*//*** @description 防抖函数(debounce)(延迟执行版)--短时间内多次触发同一事件,只执行最后一次,中间的不执行* @param func 要进行防抖的函数* @param delay 延原创 2021-12-07 13:50:04 · 182 阅读 · 0 评论 -
JavaScript函数柯里化及简单题目
JavaScript函数柯里化柯里化是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回一个新函数,这个新函数能够接受原函数的参数。下面可以通过例子来帮助理解。// 简单的柯里化function adder(num) { return function(x) { return num + x; }}var add5 = adder(5);var add6 = adder(6);console.log(add5(1)); // 6console.log(add6(1));原创 2021-12-07 13:39:44 · 156 阅读 · 0 评论 -
JavaScript中伪数组变真数组
JavaScript中伪数组变真数组首先介绍两种非常简单直接的方法:[...伪数组] // ES6的语法糖,直接将伪数组(对象)变为真数组Array.from(伪数组) // Array中的静态方法,直接将伪数组(对象)变为真数组下面讲解伪数组和真数组的区别,还有利用数组的方法将伪数组变为真数组:伪数组与真数组的区别:伪数组是对象伪数组原型是Object,而不是Array所以伪数组没有数组的方法,如push()、shift()、find()等等伪数组的属性名与数组的下原创 2021-12-07 00:20:15 · 523 阅读 · 0 评论 -
JavaScript中各种类型的检测
JavaScript中各种类型的检测// 字符串类型typeof '123' // 返回'string'// 数字类型typeof 123 // 返回'number'typeof 123.1 // 返回'number'// 布尔类型typeof true // 返回'boolean'// undefinedtypeof undefined // 返回undefinedvar xx === undefined // 返回true// nulltypeof nul原创 2021-12-06 21:26:10 · 153 阅读 · 0 评论 -
JavaScript算法之指针思想
JavaScript算法之指针思想JavaScript中的指针其实就是下标位置,下面以一个例子来使用指针思想。// 尝试寻找字符串中,连续重复次数最多的字符var str = 'aaaabbbbbbbccccccccccccdddd'// 设计指针 i 和 j 并初始化var i = 0, j = 1算法思路:在循环中利用指针进行逐一扫描如果 i 和 j 指向的字符一样,那么 i 不动,j 后移如果 i 和 j 指向的字不一样,此时说明他们之间的字符是连续相同的,让 i 跳到 j原创 2021-12-06 18:32:59 · 512 阅读 · 0 评论 -
JavaScript中使用 arguments 模拟重载
JavaScript中使用 arguments 模拟重载在JavaScript 中,每个函数内部可以使用 arguments 对象,该对象包含了函数被调用时的实际参数值。arguments 对象虽然在功能上与数组有些类似,但它不是数组。arguments 对象与数组的类似体现在它有一个length 属性,同时实际参数的值可以通过[]操作符来获取,但arguments 对象并没有数组可以使用的push 、pop 、splice 等方法。其原因是arguments 对象的prototype 指向的是Obj原创 2021-12-05 23:01:05 · 418 阅读 · 0 评论 -
JavaScript优化循环结构
JavaScript优化循环结构循环是最浪费资源的一种流程。循环结构中一点小小的损耗都会被成倍放大,从而影响程序运行的效率。下面从以下几个方面介绍如何优化循环结构,从而提高循环结构的执行效率。(1) 优化结构循环结构常常与分支结构混用在一起,因此如何嵌套就非常讲究了。例如,设计一个循环结构,结构内的循环语句只有在特定条件下才被执行。使用一个简单的例子来演示,其正常思维结构如下:var a = true;for (var b = 1; b < 10; b ++) { //循环结构 if (原创 2021-12-05 22:26:09 · 447 阅读 · 0 评论 -
JavaScript递归算法优化之制表(cache储存)技术
JavaScript递归算法之制表技术代码所做的事情越少,它的运行速度就越快,因此,避免重复工作很有意义。多次执行相同的任务也在浪费时间。制表法通过缓存先前计算结果为后续计算所使用,避免了重复工作,这使得制表成为递归算法中最有用的技术。当递归函数被多次调用时,重复工作很多。以下factorial()函数是一个递归函数重复多 次的典型例子。function factorial(n) { if (n == 0) { return l } else { return n * factor原创 2021-12-05 22:08:31 · 491 阅读 · 0 评论 -
JavaScript中使用递归模式
JavaScript中使用递归模式复杂算法通常比较容易使用递归实现。很多传统算法正是通过递归实现的,如阶乘函数。function factorial(n) { if(n == 0) { return 1 } else { return * factorial(n - 1) }}递归函数的问题:错误定义或缺少终结条件会导致函数长时间运行,使浏览器出现假死现象。此外,递归函数还会受到浏览器调用栈大小的限制。JavaScript引擎所支持的递归数量与JavaScript原创 2021-12-04 23:47:12 · 198 阅读 · 0 评论 -
JavaScript的Object.create()方法
JavaScript的Object.create()方法ES5定义了一个名为Object.create()的方法,它创建一个对象,其中第一个参数就是这个对象的原型,Object.create()提供第二个可选参数,用以对对象的属性进行进一步描述。// Object.create()是一个静态方法// 以下展示不同参数的用法// 一个参数var o = Object.create(null) // 相当于空对象,任何属性都没有var o = Object.create(Object.protot原创 2021-11-26 23:03:45 · 2770 阅读 · 2 评论 -
JavaScript中break、continue和return语句
JavaScript中break、continue和return语句一. 标签语句代码块定义标签:1. 标签名 :代码块(循环、条件判断等)2. 标签名:{ 代码... }注意:break和continue是JavaScript中唯一可以使用语句标签的语句标签名不能是JavaScript保留关键字标签的命名空间和变量或函数的命名空间是不同的,所以标签名可以和变量或函数名一样标签语句只有在被标识的代码块中才起作用二. break语句单独使用break语句原创 2021-11-26 19:04:36 · 447 阅读 · 0 评论 -
JavaScript中in运算符和instanceof运算符详解
JavaScript中in运算符和instanceof运算符详解1. in运算符in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右侧操作数是一个对象。如果右侧的对象拥有一个名为左操作符的属性名,那么表达式返回true,例如:var point = {x: 1, y: 1}"x" in point // 返回true,point对象中存在一个名为"x"的属性"z" in point // 返回false,point对象中不存在一个名为"z"的属性"toString" in poi原创 2021-11-24 14:32:19 · 1142 阅读 · 0 评论 -
位运算符的详细解析及妙用
位运算的符详细解析1. 按位与(&)位运算符 “&” 对它的整型操作数逐位执行布尔与(AND)操作。只有两个操作数中相对应的位都是1,结果中的这一位才是1。例如,0b10010 & 0b11001 = 0b10000。2. 按位或(I)位运算符 “|” 对它的整型操作数逐位执行布尔或(OR)操作。如果其中一个操作数相应的位为1,或者两个操作数相应位都是1,那么结果中的这一位就为1。例 如:0b10010 & 0b11001 = 0b11011。3. 按位异或(^)原创 2021-11-24 01:19:20 · 1883 阅读 · 1 评论