《每天十分钟》红宝书第4版
文章平均质量分 79
每天抽出十分钟时间学习前端红宝书并记录笔记,仅供参考,侵权必究
lorinzhang
纸上得来终觉浅,绝知此事要躬行
展开
-
《每天十分钟》-红宝书第4版-函数
事实上,在使用 function 关键字定义(非箭头)函数时,可以在函数内部访问 arguments 对象,从中取得传进来的每个参数值。arguments 对象是一个类数组对象(但不是 Array 的实例),因此可以使用中括号语法访问其中的元素(第一个参数是 arguments[0],第二个参数是 arguments[1])。你可以传一个、三个,甚至一个也不传,解释器都不会报错。如果函数是使用箭头语法定义的,那么传给函数的参数将不能使用 arguments 关键字访问,而只能通过定义的命名参数访问。原创 2024-07-12 20:06:14 · 383 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-代理与反射(二)
代理可以定义包含捕获器的处理程序对象,而这些捕获器可以拦截绝大部分 JavaScript 的基本操作和方法。与代理如影随形的反射 API,则封装了一整套与捕获器拦截的操作相对应的方法。开发者使用它可以创建出各种编码模式,比如(但远远不限于)跟踪属性访问、隐藏属性、阻止修改或删除属性、函数参数验证、构造函数参数验证、数据绑定,以及可观察对象。代理可以拦截反射 API 的操作,而这意味着完全可以创建一个代理,通过它去代理另一个代理。其实一个走的是构造函数,一个是触发的 set ,而不同的this 导致的。原创 2024-06-15 19:10:09 · 450 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-代理与反射
使用代理的主要目的是可以定义捕获器(trap)。捕获器就是在处理程序对象中定义的“基本操作的拦截器”。每个处理程序对象可以包含零个或多个捕获器,每个捕获器都对应一种基本操作,可以直接或间接在代理对象上调用。每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为。例如,可以定义一个 get()捕获器,在 ECMAScript 操作以某种形式调用 get()时触发。原创 2024-05-31 17:25:44 · 810 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(八)
混入模式可以通过在一个表达式中连缀多个混入元素来实现,这个表达式最终会解析为一个可以被继承的类。如果 Person 类需要组合 A、B、C,则需要某种机制实现 B 继承 A,C 继承 B,而 Person再继承 C,从而把 A、B、C 组合到这个超类中。一个策略是定义一组“可嵌套”的函数,每个函数分别接收一个超类作为参数,而将混入类定义为这个参数的子类,并返回这个类。类的语法让开发者可以优雅地定义向后兼容的类,既可以继承内置类型,也可以继承自定义类型。虽然类继承使用的是新语法,但背后依旧使用的是原型链。原创 2024-05-04 22:13:50 · 815 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(七)
与函数类型相似,定义类也有两种主要方式:类声明和类表达式。原创 2024-04-14 22:16:13 · 748 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(六)
上节提到原型包含引用值导致的继承问题,为了解决这种问题,一种叫作“盗用构造函数”(constructor stealing)的技术在开发社区流行起来(这种技术有时也称作“对象伪装”或“经典继承”)。因为毕竟函数就是在特定上下文中执行代码的简单对象,所以可以使用apply()和 call()方法以新创建的对象为上下文执行构造函数。基本的思路是使用原型链继承原型上的属性和方法,而通过盗用构造函数继承实例属性。组合继承弥补了原型链和盗用构造函数的不足,是 JavaScript 中使用最多的继承模式。原创 2024-03-27 22:43:07 · 546 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(五)
而上面的写法完全重写了默认的 prototype 对象,因此其 constructor 属性也指向了完全不同的新对象(Object 构造函数),不再指向原来的构造函数。因为实例和原型之间的链接就是简单的指针,而不是保存的副本,所以会在原型上找到sayHi属性并返回这个属性保存的函数。前面在谈到原型的问题时也提到过,原型中包含的引用值会在所有实例间共享,这也是为什么属性通常会在构造函数中定义而不会定义在原型上的原因。通过原生对象的原型可以取得所有默认方法的引用,也可以给原生类型的实例定义新的方法。原创 2024-03-24 22:33:23 · 782 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(四)
如果没有找到这个属性,则搜索会沿着指针进入原型对象,然后在原型对象上找到属性后,再返回对应的值。于是就返回了保存在原型上的这个函数。在 ECMAScript 6 新增符号类型之后,相应地出现了增加一个 Object.getOwnPropertyNames()的兄弟方法的需求,因为以符号为键的属性没有名称的概念。在单独使用时,in 操作符会在可以通过对象访问指定属性时返回 true,无论该属性是在实例上还是在原型上。与原型对象中同名的属性,那就会在实例上创建这个属性,这个属性会遮住原型对象上的属性。原创 2024-03-16 22:20:01 · 625 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(三)
脚本中没有访问这个[[Prototype]]特性的标准方式,但 Firefox、Safari 和 Chrome会在每个对象上暴露__proto__属性,通过这个属性可以访问对象的原型。每个函数都会创建一个 prototype 属性,这个属性是一个对象,包含应该由特定引用类型的实例共享的属性和方法。实际上,这个对象就是通过调用构造函数创建的对象的原型。ECMAScript 的 Object 类型有一个方法叫 Object.getPrototypeOf(),返回参数的内部特性[[Prototype]]的值。原创 2024-03-07 23:09:05 · 700 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(二)
和面向对象相关的内容开始了,认真抄,用了很多年 ,要多思考。ECMAScript 5.1 并没有正式支持面向对象的结构,比如类或继承。ECMAScript 6 开始正式支持类和继承。ES6 的类旨在完全涵盖之前规范设计的基于原型的继承模式。原创 2024-02-06 14:32:45 · 811 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-对象、类与面向对象编程
ECMA-262 将对象定义为一组属性的无序集合。ECMAScript 的对象想象成一张散列表,其中的内容就是一组名/值对,值可以是数据或者函数。原创 2024-02-05 19:27:10 · 722 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-迭代器与生成器(二)
生成器的形式是一个函数,这个函数比较特殊,它拥有在一个函数块内暂停和恢复代码执行的能力。函数名称前面加一个星号(*) 这就表示它是一个生成器了标识生成器函数的星号不受两侧空格的影响调用生成器函数会产生一个生成器对象。生成器对象一开始处于暂停执行(suspended)的状态。与迭代器相似,生成器对象也实现了 Iterator 接口,因此具有 next()方法。调用这个方法会让生成器开始或恢复执行。原创 2024-01-31 20:33:40 · 413 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-迭代器与生成器
/ Counter 的实例应该迭代 limit 次next() {} else {// 1// 2// 3这个类实现了 Iterator 接口,但不理想。// 1// 2// 3为了让一个可迭代对象能够创建多个迭代器,必须每创建一个迭代器就对应一个新计数器。为此,return {next() {} else {// 1// 2// 3// 1// 2// 3每个以这种方式创建的迭代器也实现了 Iterable 接口。// true。原创 2024-01-25 19:47:16 · 786 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-集合引用类型(四)- Set
使用Set时,需要考虑几个地方。某些 Set 操作是有关联性的,因此最好让实现的方法能支持处理任意多个集合实例。Set 保留插入顺序,所有方法返回的集合必须保证顺序。尽可能高效地使用内存。扩展操作符的语法很简洁,但尽可能避免集合和数组间的相互转换能够节省对象初始化成本。不要修改已有的集合实例。union(a, b)或 a.union(b)应该返回包含结果的新集合实例。原创 2024-01-24 11:15:46 · 842 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-集合引用类型(四)- Map
JS中实现“键/值”式存储可以使用 Object 来方便高效地完成,TC39 委员会专门为“键/值”存储定义了一个规范,于是就有了Map。原创 2024-01-23 14:15:22 · 973 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-集合引用类型(三)
数组还有一些常见api,还有一种特别的定型数组。原创 2024-01-19 23:01:15 · 427 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-集合引用类型(二)
接着写数组相关内容原创 2024-01-13 18:02:46 · 414 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-集合引用类型
实际上,在我们开发项目的过程中,框架搭建好之后,日常还是和各种类型的变量打交道,所以要写出严谨的代码还是要对常用的变量逐一学习,面试过程中也通常会被问一些api的理解,或者在解决问题过程中熟练使用api。原创 2024-01-12 12:35:37 · 818 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-基本引用类型
JavaScript 中的对象称为引用值,几种内置的引用类型可用于创建特定类型的对象。引用值与传统面向对象编程语言中的类相似,但实现不同。Date 类型提供关于日期和时间的信息,包括当前日期、时间及相关计算。RegExp 类型是 ECMAScript 支持正则表达式的接口,提供了大多数基础的和部分高级的正则表达式功能。JavaScript 比较独特的一点是,函数实际上是 Function 类型的实例,也就是说函数也是对象。因为函数也是对象,所以函数也有方法,可以用于增强其能力。原创 2024-01-10 14:13:22 · 935 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-性能
在使用垃圾回收的编程环境中,开发者通常无须关心内存管理。分配给浏览器的内存通常比分配给桌面软件的要少很多,分配给移动浏览器的就更少了。要避免这种动态分配操作,可以在初始化时就创建一个大小够用的数组,从而避免上述先删除再创建的操作。V8 会在后台配置,让这两个类实例共享相同的隐藏类,因为这两个实例共享同一个构造函数和原型。由于 JavaScript 数组的大小是动态可变的,引擎会删除大小为 100 的数组,再创建一个新的大小为。矢量对象的生命周期很短,那么它会很快失去所有对它的引用,成为可以被回收的值。原创 2024-01-03 19:05:33 · 905 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-执行上下文与作用域
先阅读一段晦涩难懂的文字执行上下文(以下简称“上下文”)的概念在 JavaScript 中是颇为重要的。变量或函数的上下文决定 了它们可以访问哪些数据,以及它们的行为。每个上下文都有一个关联的变量对象(variable object), 而这个上下文中定义的所有变量和函数都存在于这个对象上。虽然无法通过代码访问变量对象,但后台 处理数据会用到它。全局上下文是最外层的上下文。根据 ECMAScript 实现的宿主环境,表示全局上下文的对象可能不一 样。原创 2023-12-31 22:52:33 · 909 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-变量、作用域与内存
最近有点忙,好长时间没抄经了,今天继续,之前语言基础相对简单,跳过一部分操作符。原创 2023-08-27 09:34:46 · 215 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-语言基础-数据类型(五)
根 据 接 收 到 的 对 象 类 型 选 择 如 何 将 一 个 类 数 组 对 象 拼 接 成 数 组 实 例。该用 Array.prototype.concat()打平其数组元素”。ES6 中的 Array.prototype.concat()方法会。只操作一个值的操作符叫一元操作符(unary operator)。一元操作符是 ECMAScript 中最简单的操作符。这个符号作为一个属性表示“一个布尔值,如果是 true,则意味着对象应。最近刀郎出了新专辑《山歌寥哉》不错~原创 2023-08-04 22:29:56 · 478 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-语言基础-数据类型(四)
对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。竹深树密虫鸣处,时有微凉不是风。杨万里杨万里〔宋代〕原创 2023-07-24 13:08:24 · 111 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-语言基础-数据类型(三)
Symbol.keyFor() 可以查询某个全局符号在全局注册表中的描述字符串,但参数必须是个符号类型否则异常。注意:在全局注册表中定义的符号和使用普通 Symbol()定义的符号 即使描述一致,值也不一样。此方法会检查全局运行时注册表是否存在对应的符号,不存在创建并放到全局中,存在就返回该实例。在运行的上下文中需要共享一个符号实例的时候可以 使用 Symbol.for() 方法。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。符号是原始值,且符号实例是唯一、不可变的。原创 2023-07-19 22:46:43 · 82 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-语言基础-数据类型(二)
此方法规则也很简单和 parseInt 一致,有个特殊情况它始终忽略字符串开头的0,所以它遇到16进制 0x 会始终返回0,也就是说 parseFloat() 只能处理16进制。从第一个非空格字符开始转换。如果第一个字符不是数值字符**、加号或减号**,parseInt()立即返回 NaN。这意味着空字符串也会返回 NaN(这一点跟 Number()不一样,它返回 0)。,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。未觉池塘春草梦,阶前梧叶已秋声。又到了欣赏古诗时间😄。原创 2023-07-15 21:58:45 · 195 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-语言基础-数据类型(一)
答:JS 浮点值的精确度最高可达 17 位小数,0.1的二进制表示的是一个无限循环小数,JS对这个小数的二进制进行截取前17位,截取之后0.1不再是0.1,截取之后0.1变成了 0.100…任何无法表示的负数以-Infinity(负无穷大)表示,任何无法表示的正数以 Infinity(正无穷大)表示。默认情况下,ECMAScript 会将小数点后至少包含 6 个零的浮点值转换为科学记数法(例如,0.000 000 3 会被转换为 3e-7)。这是因为特殊值 null 被认为是一个对空对象的引用。原创 2023-07-08 23:43:13 · 293 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-HTML 中的 JavaScript
使用元素将 JavaScript 插入 HTML是给页面添加灵魂的最直接方式。这个元素是由网景公司创造被加入到 HTML 规范,网景对于前端想个什么词来形容呢,混沌初开,开山鼻祖,女娲造人…元素目前规定了8 个属性。我们按照添加方式或者加载执行顺序不同逐个了解。原创 2023-07-02 15:16:58 · 747 阅读 · 0 评论 -
《每天十分钟》-红宝书第4版-什么是JavaScript
天下大事,分久必合”,1997年,JavaScript 1.1作为提案被提交给欧洲计算机制造商协会(Ecma),第39技术委员会(TC39)承担了制定统一脚本语言和语义的任务(TC39委员会由来自网景、Sun、微软、Borland 、Nombas 和其他对这门脚本语言有兴趣的公司的工程师组成。有网景公司的推广,有很牛的浏览器加持,web正处于风口期,就这样天时地利人和的条件下,由于JavaScript 1.0很成功,网景又在Netscape Navigator 3中发布了1.1版本。原创 2023-06-30 19:39:46 · 208 阅读 · 0 评论