JavaScript
文章平均质量分 50
本人对JS学习的总结,同时也分享出来,交流讨论,互相学习
Kedar
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
默认参数值
很多时候会给函数的参数设置默认值,方式就像下面两种:function a(param1,param2){ param1 = param1 || 'default_value'; param2 !== undefined ? param2 : 'default_value'; ...}上面这段代码通常的意义是: 如过没有传入 param1、param2 参数,给它赋值默认值 ‘default_value’。param1 可能会有风险,如果你传入 0 、’’、null 等类型转换后为 fal原创 2021-01-15 16:55:38 · 1417 阅读 · 0 评论 -
JavaScript 生成器
一般函数开始运行,在它结束之前,不会被任何事情打断。而在 ES6 中引入了一种叫生成器的函数形式,生成器可以在执行当中暂停自身,可以立即恢复执行,也可以过一段时间之后恢复执行,所以生成器它不能像普通函数那样保证运行到完毕。 还有一点是生成器在每次暂停 / 恢复 循环都提供了一个双向传递信息的功能,生成器可以返回一个值,恢复它的控制代码也可以接收一个值。一. 语法function *fn...原创 2020-03-06 14:52:12 · 1513 阅读 · 1 评论 -
JavaScript import&export
支撑 ES6 模块的两个主要关键字是 import 和 export 。它们在语法上有着自己的特点,这篇文章主要介绍这些特点。首先值得注意的一点就是这两个关键字都必须在最顶层作用域使用。也就是说,它们必须出现在所有代码块和函数的外面。一. 导出成员export 关键字可以放在声明前面,或者作为一个操作符与要导出的列表绑定。例://放在声明前面export function foo(){ ...原创 2020-01-16 18:54:33 · 350 阅读 · 0 评论 -
JavaScript static
把类比作函数,类里面的方法是添加到类的 prototype 对象上的,而如果声明了 static 方法,这个方法是直接添加到这个类的函数对象上的,而不是在这个函数的原型上的。例:class Father{ static fatherName(){console.log('father')} fatherSay(){console.log('i am father!')}}class S...原创 2020-01-15 19:35:48 · 1750 阅读 · 0 评论 -
JavaScript extends 和 super
ES6 类提供了在两个函数原型之间建立 [[Prototype]] 链接的语法糖 extends,还提供了自动指向“父构造器”的语法糖 super。本篇文章介绍这两者,请看以下例子,以方便介绍:class FooFather{ constructor(a,b){ this.x = a; this.y = b; } returnXY(){ return this.x * this...原创 2020-01-15 15:56:31 · 993 阅读 · 0 评论 -
JavaScript class
class 是 ES6 新增的关键字以及相关的机制。请看以下例子:class Foo { constructor(a,b){ this.a = a; this.b = b; } giveAB(){ return this.a * this.b; }}因为 JavaScript 的类并不像传统类的工作机制。使用 class 这个语法糖,上面的例子需要注意以下几点:cl...原创 2020-01-12 19:41:41 · 170 阅读 · 0 评论 -
JavaScript 原型
一.原型 [[Prototype]]原型 [[Prototype]] 是 JavaScript 中对象的一个内置属性。它本质实际上是对其他对象的引用,基本上对象在创建的时候 [[Prototype]] 都会获得一个非空的值。[[Prototype]] 有什么作用?例:var obj1 = { a:2}var obj2 = Object.create(obj1);obj2; // {}...原创 2020-01-12 15:45:14 · 139 阅读 · 0 评论 -
ES6 公开符号Symbol.xxx
ES6 新增了类型Symbol,除了自己定义符号之外,还预定义了一些内置符号,称为公开符号。一. Symbol.iterator这个符号表示任意对象上的一个专门的属性,语言机制会自动的在这个属性上寻找一个方法,这个方法会构造一个迭代器来消耗这个对象的值。… 展开和 for…of 循环会自动使用它。通过定义 Symbol.iterator 属性为一对象的值,会覆盖它默认的迭代器,例:var ...原创 2019-12-15 13:31:14 · 255 阅读 · 0 评论 -
ES6 新增API Object
Object 也新增了些 API。一. Object.is(…)Object.is(…) 执行比 ===(严格等于) 更加严格的值比较。它调用的是底层 SameValue 算法,基本上和严格等于的比较是一样的,它们有两个区别。var x = NaN, y = 0, z = -0;x === x; //falsey === z; //trueObject.is(x,x); /...原创 2019-12-12 13:04:53 · 213 阅读 · 0 评论 -
ES6新增API Array
本篇是 ES6 新增关于 Array 的API。一. Array.of(…)Array(…) 构造器如果只传入一个参数且为数字的话,那么这个构造器不会构造一个值为这个数字的数组,而是构造一个长度为这个数字的空数组。而 Array.of(…) 没有这个问题。例:var a = Array(3);a.length; // 3a[0]; // undefinedvar b = Arr...原创 2019-12-10 19:55:41 · 240 阅读 · 0 评论 -
解构
例一、对象属性赋值模式:function data(){ return { x:1,y:2,z:3,a:4,b:5,c:6 }}var {x:x,y:y,z:z}= data();console.log(x,y,z); // 1 2 3var {a,b,c} = data();console.log(a,b,c); // 4 5 6上面的例子中:左侧的对象把右侧的数值结...原创 2019-12-09 21:02:09 · 190 阅读 · 0 评论 -
异步篇:Promise
这篇文章,总体上来说一下 Promise。new Promise(…)new Promise 必须传入一个函数回调,它是同步的或者立即调用的;这个函数回调接受两个函数回调,通常称为 resolve 和 reject。reject(…) 就是拒绝这个 Promise 。resolve 是可能完成,也可能拒绝,如果传给 resolve 的是一个普通值(立即值),promise 会用这个值完成。...原创 2019-12-09 18:54:14 · 230 阅读 · 0 评论 -
异步篇:Promise.all() & .race()
一般 Promise 是采用 Promise 链的顺序控制流程的,Promise 还有其他异步模式,用来简化异步的流程控制,易于追踪。一. Promise.all([…])在异步序列中,任意时刻只能有一个异步任务执行,如果想同时执行,怎么实现呢?可以用到 Promise.all([…]),它并不能让两个异步任务同时执行,但是可以让两个异步任务执行完了之后再让后面的流程继续执行,相对于这两个异步...原创 2019-12-04 19:11:13 · 696 阅读 · 0 评论 -
异步篇:Promise信任问题
回调函数的信任问题在其他异步篇里面有介绍,这篇文章关注 Promise 是否解决了这些问题?一. 调用过早一个任务,它有时同步完成,有时异步完成,这可能会导致竞态条件。而 Promise 不用担心这个问题。因为:new Promise(function(resolve){ resolve(24); // 无法被同步观察})一个立即完成的 Promise (如上例子),它无法被同步观...原创 2019-12-03 21:00:15 · 379 阅读 · 0 评论 -
异步篇:识别Promise (方法之一)
如何确定一个值是不是真正的 Promis,或者这个值的行为是不是很类似 Promise ?Promise 是通过 new Promise(…) 创建,那么是不是可以用 instanceof Promise 来检查?一. 为什么 instanceof 不足以检查 Promise原因有许多,总结如下:Promise 值可能是从其他浏览器窗口接收到的,然而接收到的 Promise 可能和当前窗口...原创 2019-12-03 19:39:29 · 1573 阅读 · 0 评论 -
异步篇:理解Promise
回调函数有着缺乏顺序性和可信任性的缺陷,而 Promise 是解决这两个缺陷的模式。这篇文章分别通过两个方式来理解 Promise 模式。第一个方式:未来值设想一下,如果某天你突然想要去一个风景区,需要坐高铁。计划好了就去买票。买好了以后,我们获得了一张车票 (Promise,可以乘坐某班次高铁的凭据) ,在高铁出发前的时间,我们都可以在候车厅干自己的事,不用关心时间,因为运行商会通知我们进站...原创 2019-12-02 16:58:20 · 248 阅读 · 0 评论 -
异步篇: 回调
一. 为什么采用回调?采用 Ajax 请求为例:var data = ajax("http://xxx.xx.xx"); // 假设发送一个Ajax请求获取一些数据console.log(data); // 通常是获取不到data的因为 Ajax 请求一般是异步的,发送了请求之后,不会等待服务器响应结果而会继续执行后面的代码,而此时 console.log 中的 data 尚未获取到值...原创 2019-11-26 14:19:46 · 173 阅读 · 0 评论 -
数组对象
一. 创建数组字面量方式创建 var arr = [1,"2",{name:"kedar"},false,[1,2,3]]; // 里面可以容纳任何类型的值new Array()var arr = new Array(); // 创建空数组var arr1 = new Array(9); // 传入一个参数规定数组的长度var arr2 = new Array(9,{name...原创 2019-11-24 13:42:08 · 2276 阅读 · 0 评论 -
Getter 和 Setter
对象的属性值的访问(对值的获取)有 [[ get ]] 操作,对值的操作有 [[ put ]] ,这篇文章主要探讨一下对象的这两个操作。一. get 获取值的步骤get操作并不仅仅是在对象里面查找一个你需要查找的属性,例:var obj = { a: 24}obj.a; // 24obj.b; // undefined这个例子中,obj 确实在自身里面找到了名为 “a” ...原创 2019-11-22 20:57:45 · 343 阅读 · 0 评论 -
对象属性描述符
从 ES5 开始,对象的属性都具备了属性的描述符,它能设置属性的特性。我们可以使用 Object.defineProperty(…) 来添加或者配置一个属性并对它的特性进行配置。属性描述符有: writable、 enumerable 和 configurable。一. writable (可写)决定是否可以修改属性的值。var obj = {};Object.defineProper...原创 2019-11-22 11:09:42 · 572 阅读 · 0 评论 -
JavaScript This
一. this的机制this是在运行时绑定的,this的绑定和函数声明的位置没有关系,取决于函数的调用方式。注意点:this不在编写时绑定,它的执行上下文取决于函数调用时的条件。this只取决于函数的调用方式。this不指向函数的词法作用域,也不指向自身(参见第二点只取决于函数的调用方式)。执行上下文在函数被调用的时候创建,里面包含了函数在哪里被调用,调用的方法,传入的参数等...原创 2019-11-21 10:46:03 · 116 阅读 · 0 评论 -
JavaScript 闭包
一. 定义函数能够保存、访问它所在的词法作用域,就产生了闭包。注意点能够保存它 “所在” 的词法作用域。能够访问它所在的词法作用域。在它的词法作用域以外执行也同样产生闭包。二. 示例 function a(){ var num = 24; function b(){ console.log(num); } return b; } var run = ...原创 2019-11-19 20:45:09 · 107 阅读 · 0 评论 -
JavaScript 提升
一. 什么是提升?当某个作用域创建,到了执行作用域里面的内容的时候,编译器会把作用域里面的变量或函数声明放到作用域的最前面,这一过程称为提升。二. 提升的特点只提升变量,语句的其他逻辑不会提升。函数优先提升。三. 示例只提升变量 console.log(a); // undefined var a = 24;上面的例子运行在 window 作用域中,打印 a 为...原创 2019-11-19 19:35:14 · 284 阅读 · 0 评论 -
块作用域(let const 块作用域函数)
块级作用域ES6 之前创建块级作用域声明函数创建块级作用域var a = 23;function createBlock(){ var a = 24; console.log(a); // 24}console.log(a); // 23立即执行函数创建块级作用域var a = 23;(function createBlock(){ var a = 24; co...原创 2019-11-14 14:35:51 · 219 阅读 · 0 评论 -
宽松相等(==)和严格相等(===)
宽松相等和严格相等最开始我没有阅读《你不知道的JavaScript》的时候,我对 == 和 === 的理解就恰如书中说的常见的误区一样:“ == 是检查值是否相等, ===是判断值和类型是否相等”。这样的理解我一直没有怀疑,毕竟平时写代码的时候,我就是这样用的,也没有遇到什么问题。但是编程,准确知道你写的每一句代码是干什么的,怎么干的,非常重要,这样才相当于代码是你实现自己思维的载具,而不是坐上...原创 2019-11-13 13:43:22 · 315 阅读 · 0 评论 -
JavaScript类型转换: Boolean
转换为Booleantrue && falseJavaScript中有两个值:true 和 false ,它们代表布尔值中的 “真” 和 “假”。下面看一个例子,看看JavaScript中有哪些 “假” 值。例:var a = [undefined,null,false,+0,-0,NaN,''];for(var i = 0; i < a.length; i++){...原创 2019-11-12 20:14:16 · 726 阅读 · 0 评论 -
for of遍历原理探究以及用来遍历对象
使用for of遍历对象 ** for of 遍历数组的时候,for of 会自动循环请求数组的迭代器,并自动使用这个迭代器遍历数组的值**,而对象并不能使用for of来遍历。如:var array = [1,4,3,4,5,2]for(var value of a){ console.log(value);}// 1 4 3 4 5 2var obj = {prop1:...原创 2019-11-11 21:19:51 · 4184 阅读 · 0 评论
分享