[试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 规范,在为变量赋值时,ECMAScript 解释程序必须判断该值是原始类型 还是引用类型。ECMAScript 解释程序在处理原始类型和引用类型的变量赋值机制上,采用了 不同的方式。 ECMAScript 的原始类型包括 Undefined、Null、Boolean、Number 和 String 五大类型。因 此,ECMAScript 解释程序在为变量赋值时,就会先判断该值是否为这五大原始类型。而 Ecma-262 Ecma-262 规范对于引用类型的定义比较抽象,其实引用类型就是一个对象,类似于 Java 语言 中类(class)的概念。如果 ECMAScript 解释程序判断出值不是原始类型,那么就是引用类型。 由于原始类型的值所占据的空间是固定的,因此可将其存储在占用较小内存区域的“栈” 中,这种存储机制便于 ECMAScript 解释程序迅速查找变量的值。而如果一个值是引用类型, 那么其存储空间将从“堆”中分配。 为“值 的一个集合”,其中每种原始类型均定义了其所包含值的范围及其字面量的表示形式。 ECMAScript 语法提供“typeof”运算符来判断一个值是否在某种类型的范围内。设计人 员不但可以用该运算符判断一个值是否表示一种原始类型,还可以判断出其具体表示哪种原始 类型。在 JS 脚本中使用“typeof”运算符将返回下列值之一: � undefined:如果变量是 Undefined0 码力 | 52 页 | 3.83 MB | 1 年前3
廖雪峰JavaScript教程录 致谢 JavaScript教程 1 JavaScript简介 2 快速入门 2.1 基本语法 2.2 数据类型和变量 2.3 字符串 2.4 数组 2.5 对象 2.6 条件判断 2.7 循环 2.8 Map和Set 2.9 iterable 3 函数 3.1 函数定义和调用 3.2 变量作用域 3.3 方法 3.4 高阶函数 3.4.1 map/reduce 下面的一行代码包含两个语句,每个语句用 ; 表示语句结束: 1. var x = 1; var y = 2; // 不建议一行写多个语句! 语句块是一组语句的集合,例如,下面的代码先做了一个判断,如果判断成立,将执行 {…} 中的所有 语句: 1. if (2 > 1) { 2. x = 1; 3. y = 2; 4. z = 3; 5. } 注意花括号 false 变成 true : 1. ! true; // 结果为false 2. ! false; // 结果为true 3. ! (2 > 5); // 结果为true 布尔值经常用在条件判断中,比如: 1. var age = 15; 2. if (age >= 18) { 3. alert('adult'); 4. } else { 5. alert('teenager');0 码力 | 264 页 | 2.81 MB | 10 月前3
Hello 算法 1.2.0 简体中文 Dart 版如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。 我认为学算法(以及其他基础科目)的意义不是在于在工作中从零实现它,而是基于学到的知识,在解决问 题时能够作出专业的反应和判断,从而提升工作的整体质量。举一个简单例子,每种编程语言都内置了排序 函数: ‧ 如果我们没有学过数据结构与算法,那么给定任何数据,我们可能都塞给这个排序函数去做了。运行顺 畅、性能不错,看上去并没有什么问题。 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。对 于此类情况,我们时常难以仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分 析仍然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: void algorithm(int n) 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。0 码力 | 378 页 | 18.46 MB | 10 月前3
Hello 算法 1.2.0 简体中文 JavaScript 版如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。 我认为学算法(以及其他基础科目)的意义不是在于在工作中从零实现它,而是基于学到的知识,在解决问 题时能够作出专业的反应和判断,从而提升工作的整体质量。举一个简单例子,每种编程语言都内置了排序 函数: ‧ 如果我们没有学过数据结构与算法,那么给定任何数据,我们可能都塞给这个排序函数去做了。运行顺 畅、性能不错,看上去并没有什么问题。 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。对 于此类情况,我们时常难以仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分 析仍然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: function algorithm(n) 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.0.0b1 JavaScript版需要会推算即可,数学意义可以慢慢领悟。 2.2.4. 推算方法 推算出 ?(?) 后,我们就得到时间复杂度 ?(?(?)) 。那么,如何来确定渐近上界 ?(?) 呢?总体分为两步,首 先「统计操作数量」,然后「判断渐近上界」。 1) 统计操作数量 对着代码,从上到下一行一行地计数即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作 数量 ?(?) 中的各种系数、常数项都可以被 i++) { for (let j = 0; j < n + 1; j++) { console.log(0); } } } 2. 复杂度分析 hello‑algo.com 18 2) 判断渐近上界 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 「暴力枚举」和「辅助哈希表」分别对应 空间最优 和 时间最优 的两种解法。本着时间比空间更宝贵的原则,后 者是本题的最佳解法。 方法一:暴力枚举 考虑直接遍历所有所有可能性。通过开启一个两层循环,判断两个整数的和是否为 target ,若是则返回它俩 的索引(即下标)即可。 // === File: leetcode_two_sum.js === /* 方法一:暴力枚举 */ function0 码力 | 185 页 | 14.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版需要会推算即可,数学意义可以慢慢领悟。 2.2.4. 推算方法 推算出 ?(?) 后,我们就得到时间复杂度 ?(?(?)) 。那么,如何来确定渐近上界 ?(?) 呢?总体分为两步,首 先「统计操作数量」,然后「判断渐近上界」。 1) 统计操作数量 对着代码,从上到下一行一行地计数即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作 数量 ?(?) 中的各种系数、常数项都可以被 i++) { for (let j = 0; j < n + 1; j++) { console.log(0); } } } 2. 复杂度分析 hello‑algo.com 18 2) 判断渐近上界 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 「暴力枚举」和「辅助哈希表」分别对应 空间最优 和 时间最优 的两种解法。本着时间比空间更宝贵的原则,后 者是本题的最佳解法。 方法一:暴力枚举 考虑直接遍历所有所有可能性。通过开启一个两层循环,判断两个整数的和是否为 target ,若是则返回它俩 的索引(即下标)即可。 // === File: leetcode_two_sum.ts === /* 方法一:暴力枚举 */ function0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.1.0 Dart版和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: void algorithm(int n) 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当0 码力 | 378 页 | 18.45 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: function algorithm(n) 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: function algorithm(n: 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.0.0 JavaScript版和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 2.3.2 函数渐近上界 给定一个输入大小为 ? 的函数: function algorithm(n) 不断的 实践中,就可以逐渐领悟其数学意义。 根据定义,确定 ?(?) 之后,我们便可得到时间复杂度 ?(?(?)) 。那么如何确定渐近上界 ?(?) 呢?总体分 为两步:首先统计操作数量,然后判断渐近上界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当0 码力 | 376 页 | 17.57 MB | 1 年前3
共 37 条
- 1
- 2
- 3
- 4













