随笔分类 - javascript
摘要:1.JavaScript数据类型 基本类型:string、boolean、number、null、undefined、symbol(es6新添加),BigInt(es11新添加) 复杂数据类型:object 2. 数据类型的存储 基本类型和object类型在内存中存储的方式是不一致的,基本类型数据存
阅读全文
摘要:ES6 的 Symbol 是一种独特的原始数据类型,用于生成唯一的标识符。它的主要特点是每次创建的 Symbol 值都是唯一的,即使描述相同,也不会相等。 1.定义对象的唯一属性键,防止命名冲突 在对象中定义键值时,通常使用字符串作为键,但这可能导致命名冲突。而使用 Symbol 作为键可以确保属性
阅读全文
摘要:发布订阅模式(Publish-Subscribe)与观察者模式(Observer Pattern) 发布订阅模式和观察者模式都属于常见的设计模式,用于在一个对象的状态变化时,通知其他对象。然而,它们的实现方式和适用场景略有不同。接下来,我们分别解释这两种模式的差异,并提供 JavaScript 示例
阅读全文
摘要:1. 作用域(Scope) 作用域定义了变量和函数的可访问范围。作用域是在函数定义时确定的。JavaScript中的作用域主要分为以下几种: 全局作用域:在脚本文件或最外层定义的变量属于全局作用域。全局作用域中的变量可以在代码的任何地方访问。 函数作用域:在函数内定义的变量在函数作用域中是局部的,只
阅读全文
摘要:在JavaScript中,this关键字的值取决于它被使用的上下文。它并不像其他编程语言中的this总是指向对象的实例,而是可能指向不同的对象。以下是几种常见的this的用法及其指向的内容: 全局上下文 在全局范围(即没有在任何函数或对象内)中,this指向全局对象。在浏览器中,这通常是window
阅读全文
摘要:闭包指的是一个函数可以记住它被创建时的变量作用域,当函数在这个作用域之外执行时,依然能够访问该作用域内的变量。 function createCounter() { let count = 0; // 闭包中的私有变量 return function() { count += 1; return c
阅读全文
摘要:一、场景 0.1 + 0.2 = 0.30000000000000004 1.5 - 1.2 = 0.30000000000000004 19.9 * 100 = 1989.9999999999998 0.3 / 0.1 = 2.9999999999999996 二、原因 js中的数字只有 Numb
阅读全文
摘要:严格模式主要有以下几方面的作用及内容: 一、对作用域的限制: 使用未经声明的变量,报错(防止变量作用域提升); eval语句内声明的变量,作用域限制在eval之内(非严格模式时,eval语句内变量的作用域与eval所在作用域一致); 二、防止性能问题 动态作用域无法使用编译阶段-词法分析已经确定的作
阅读全文
摘要:DOMContentLoaded 事件 触发时机:当初始的 HTML 文档 被完全加载和解析完成,不等待样式表、图片和子框架的加载时,DOMContentLoaded 事件会被触发。 关注内容:DOMContentLoaded 事件关注的是 HTML 文档的解析和加载,它不关心外部资源(如图片、样式
阅读全文
摘要:事件绑定方法 Html事件处理程序-直接在元素上指定事件及相应的处理程序,事件处理程序中可直接访问event对象(不需要用参数接收event独享),this指向当前元素,同时还扩展了this和document的作用域,即访问对象的属性或方法时可以省略this或document Dom0级事件处理程序
阅读全文
摘要:一、原型读取或设置 prototypeObj.isPrototypeOf(obj) 判断obj是否在prototypeObj这个原型对象上 function Baz() {} var baz = new Baz(); console.log(Baz.prototype.isPrototypeOf(b
阅读全文
摘要:在ES6中,可迭代对象(iterable)是指实现了[Symbol.iterator]方法的对象。这样的对象可以使用for...of循环迭代,并且也可以使用诸如Array.from、Spread Operator(...)等操作。 可迭代对象有:数组(Array)、字符串(String)、Map对象
阅读全文
摘要:面试中经常会问到防抖、节流、函数柯里化,其他的一般不会问。 防抖函数(debouncing) 核心思想:对同一个函数进行连续调用时,只有最后次调用生效, 实现方式:使用setTimeout方法,每次调用时,清除上一次的timer,并将本次的timer记录下来就可以保证只有最后一次调用会生效 func
阅读全文
摘要:1. async和await最关键的用途是以同步的写法实现了异步调用,是对Generator异步方法的简化和改进。 2.函数前使用async修饰符时不管函数内出不出错都会返回一个Promise对象; 3.返回的Promise对象是由谁决定的? 如果函数体内的语句没有错误,则会返回一个fulfille
阅读全文
摘要:一、迭代器 1.迭代器的特征 迭代器有一个next()方法,每次调用时会返回一个对象,该对象的结构为{value:xxx,done:true},其中value表示下次应该返回的值,done表示是否还有值可提供。 当没有值可提供时,done为true,如果迭代器在迭代结束时使用了return xxx,
阅读全文
摘要:异步是ES6中使用频率最高的特性之一,也是面试中经常会被问到的问题,特此整理了相应的笔记 一、Promise的三种状态 pending-异步操作没有结束 fulfilled-异步操作已成功结束,最常见的就是在promise对象中返回resolve() rejected-异步操作未成功,可能是有错误等
阅读全文
摘要:哈希路由(Hash Routing) 哈希路由使用URL中的哈希部分(即#符号后面的部分)来控制页面内容的变化。这种方式的优点是不需要服务器端配置支持。 原理: 哈希部分的变化不会导致页面的重新加载,浏览器会触发hashchange事件。 不管是直接在链接标签上指定<a href='#abc'>te
阅读全文
摘要:1.块级函数 "use strict"; if (true) { function f() { } // 语法错误 } es5中严格模式下禁止声明块级函数,而在es6的严格模式中可以声明块级函数,并可以在块级作用 'use strict' var b= true; if(b){ function t
阅读全文
摘要:隐式转换比较是js中绕不过去的坎,就算有几年经验的工程师也很有可能对这块知识不够熟悉。就算你知道使用 比较从而避免踩坑,但是团队其它成员不一定知道有这样或那样的坑,请先在纸上写出下面代码会输出什么开始我们今天的知识总结。 console.log(new String('abc')==true) co
阅读全文
摘要:一、对象字面量语法 var person={ name:'小王', age:18, _pri:233 } 成员名称的单引号不是必须的 最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误 成员名相同会发生什么? es5普通模式下后定义的会覆盖前面定义的,严格模式则会报错 es6则不管什么模式都采
阅读全文