阮一峰 JavaScript 教程介绍 前言 入门篇 导论 历史 基本语法 数据类型 概述 null,undefined 和布尔值 数值 字符串 对象 函数 数组 运算符 算术运算符 比较运算符 布尔运算符 二进制位运算符 其他运算符,运算顺序 语法专题 数据类型的转换 错误处理机制 编程风格 console 对象与控制台 标准库 Object 对象 属性描述对象 Array CN) 构建 基本语法 JavaScript 的基本语法 语句 变量 概念 变量提升 标识符 注释 区块 条件语句 if 结构 if…else 结构 switch 结构 三元运算符 ?: 循环语句 while 循环 for 循环 do…while 循环 break 语句和 continue 语句 标签(label) 参考链接 JavaScript 程序的执行单位为行(line),也就是一行一行地执 书栈(BookStack.CN) 构建 等运算符( === )和相等运算符( == )。尤其是赋值表达式不具有 比较作用。 1. var x = 1; 2. var y = 2; 3. if (x = y) { 4. console.log(x); 5. } 6. // "2" 上面代码的原意是,当 x 等于 y 的时候,才执行相关语句。但是, 不小心将严格相等运算符写成赋值表达式,结果变成了将0 码力 | 540 页 | 3.32 MB | 10 月前3
阮一峰 《ECMAScript 6入门》 第三版ES2015)。2016年6月,小幅修订的《ECMAScript 2016标 准》(简称 ES2016)如期发布,这个版本可以看作是 ES6.1 版,因为两者的差异 非常小(只新增了数组实例的 includes 方法和指数运算符),基本上是同一个标 准。根据计划,2017年6月发布 ES2017 标准。 因此,ES6 既是一个历史名词,也是一个泛指,含义是5.1版以后的 JavaScript 的 下一代标准,涵盖了E undeclared_variable // "undefined" 上面代码中, undeclared_variable 是一个不存在的变量名,结果返 回“undefined”。所以,在没有 let 之前, typeof 运算符是百分之百安全的,永 远不会报错。现在这一点不成立了。这样的设计是为了让大家养成良好的编程习 惯,变量一定要在声明之后使用,否则就报错。 有些“死区”比较隐蔽,不太容易发现。 function 'b'] = ['a']; // x='a', y='b' let [x, y = 'b'] = ['a', undefined]; // x='a', y='b' 注意,ES6 内部使用严格相等运算符( === ),判断一个位置是否有值。所以, 如果一个数组成员不严格等于 undefined ,默认值是不会生效的。 let [x = 1] = [undefined]; x // 1 let0 码力 | 679 页 | 2.66 MB | 1 年前3
ECMAScript规范 第三版 中文版URIError(唯一资源定位符错误)。 ECMAScript 还定义了一个内置运算符(operators)集合。严格地说,它们可能不是函数或方 法。ECMAScript 运算符包含了各种各样的操作:乘法运算符,加法运算符,位移运算符,关系 运算符,相等关系运算符,二元位操作运算符,二元逻辑运算符,分配运算符,逗号运算符。 ECMAScript 语法被特意设计成类似 Java 的语法。ECMAScript 行结束符、注释或空白中的一个。源代码文本被从左到右扫描,重复地把最长的可能的 字符序 列作为下一个输入元素。 词法文法中有两个目标符。符号输入分隔元素在其它语法文法中上下文中可以是一个除号 (/) 或除法赋值(/=)运算符。符号输入元素正则表达式在其它语法文法上 下文中使用。 需要注意的是,除号和正则表达式常量存在于语法文法中的上下文中,且都被语法文法允 许;不论如 何,在斜线号不被识别为正则表达式常量的开始这一情况下,词法文法使用输入分 opt ; Throw 语句 : throw [no 行结 束符 here] 表达式 ; 这些非严格产生式的实际效果如下所示: • 若遇到托肯 ++ 或 -- ,解析器将视其为一个后缀运算符时,且在提前托肯与托肯 ++ 或 -- 之间有至少一个行结束符,则在托肯 ++ 或 -- 前自动插入一个分号。 • 若遇到托肯 continue, break, return, 或 throw,且在下一个托肯之前遇到一个0 码力 | 58 页 | 563.06 KB | 1 年前3
[试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 1.2 区分大小写 ECMAScript 语法规定对字母大小写是敏感的,也就是区分大小写的,这点是与 Java 语法 一致的。ECMAScript 语法区分大小写的规定适用于变量、函数名、运算符及其他一切代码。 比如变量 id 与 Id 是不同的;同样,函数 getElementById()与 getElementbyID()也是不同的,而 且 getElementbyID()是无效函数。 的一个集合”,其中每种原始类型均定义了其所包含值的范围及其字面量的表示形式。 ECMAScript 语法提供“typeof”运算符来判断一个值是否在某种类型的范围内。设计人 员不但可以用该运算符判断一个值是否表示一种原始类型,还可以判断出其具体表示哪种原始 类型。在 JS 脚本中使用“typeof”运算符将返回下列值之一: � undefined:如果变量是 Undefined 类型的会返回该类型; � 型在页面中的输出结果; 第 03 行代码直接在浏览器控制台窗口中输出了“typeof undefined”,目的是看一下通过 “typeof”运算符操作后的 Undefined 类型在页面中的输出效果。 页面效果如图 2.5 所示。Undefined 类型和通过“typeof”运算符操作后的 Undefined 类型, 在控制台中的输出结果均是“undefined”。 图 2.5 Undefined0 码力 | 52 页 | 3.83 MB | 1 年前3
TypeScript 4.0 使用手册
一个枚举表达式字面量(主要是字符串字面量或数字字面量) ii. 一个对之前定义的常量枚举成员的引用(可以是在不同的枚举类型中定义的) iii. 带括号的常量枚举表达式 iv. 一元运算符 + , - , ~ 其中之一应用在了常量枚举表达式 v. 常量枚举表达式做为二元运算符 + , - , * , / , % , << , >> , >>> , & , | , ^ 的操作对象。 若常量枚举表达式求值后为 "default"; 4. } 5. else { 6. return sn; 7. } 8. } 这里很明显地去除了 null ,你也可以使用短路运算符: 1. function f(sn: string | null): string { 2. return sn || "default"; 3. } 如果编译器不能够去除 null 除了用户定义的symbols,还有一些已经众所周知的内置symbols。 内置symbols用来表示语言内部 的行为。 以下为这些symbols的列表: 方法,会被 instanceof 运算符调用。构造器对象用来识别一个对象是否是其实例。 布尔值,表示当在一个对象上调用 Array.prototype.concat 时,这个对象的数组元素是否可展开。 方法,被 for-of 语句调用。返回对象的默认迭代器。0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
对象有一个返回 Iterator 对象的 Symbol.iterator 方法,那么我们说这个对象 是“可迭代的”。 迭代器协议还定义了一些ES2015中的特性像 for..of 和展开运算符以及解构赋值 中的数组的剩余运算的操作对象。 生成器 ES2015也引入了"生成器",生成器是可以通过 Iterator 接口和 yield 关键字被 用来生成部分运算结果的函数。生成器也可以在内部通过 以下规 则对混合类声明适用: extends 表达式的类型参数类型必须是混合构造函数. 混合类的构造函数 (如果有) 必须有且仅有一个类型为 any[] 的变长参数, 并 且必须使用展开运算符在 super(...args) 调用中将这些参数传递。 假设有类型参数为 T 且约束为 X 的表达式 Bas ,处理混合类 class C extends Base {...} 时会假设 在被标记为 错误: 如果 + 运算符的任何一个操作数是可空的,并且两个操作数都不 是 any 或 string 类型。 如果 - , * , ** , / , % , << , >> , >>> , & , | 或 ^ 运算 符的任何一个操作数是可空的。 如果 < , > , <= , >= 或 in 运算符的任何一个操作数是可空的。 如果 instanceof0 码力 | 557 页 | 7.48 MB | 1 年前3
廖雪峰JavaScript教程true || false; // 这个||语句计算结果为true 3. false || true || false; // 这个||语句计算结果为true ! 运算是非运算,它是一个单目运算符,把 true 变成 false , false 变成 true : 1. ! true; // 结果为false 2. ! false; // 结果为true 3. ! (2 > 5); 当我们对Number做比较时,可以通过比较运算符得到一个布尔值: 1. 2 > 5; // false 2. 5 >= 2; // true 3. 7 == 7; // true 实际上,JavaScript允许对任意数据类型做比较: 1. false == 0; // true 2. false === 0; // false 要特别注意相等运算符 == 。JavaScript在设计时,有两种比较运算符: 第一种是 小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值: 1. Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true 比较运算符 null和undefined 2.2 数据类型和变量 - 18 - 本文档使用 书栈(BookStack.CN) 构建 null 表示一个“空”的值,它和 0 以及空字符串 '' 不同,0 码力 | 264 页 | 2.81 MB | 10 月前3
Hello 算法 1.1.0 Dart版性能可能劣化,因此被视为负面属性;而如果最佳时间复杂度优于平均时间复杂度,则被视为正面属性。 是否基于比较:基于比较的排序依赖比较运算符(<、=、>)来判断元素的相对顺序,从而排序整个数组, 理论最优时间复杂度为 ?(? log ?) 。而非比较排序不使用比较运算符,时间复杂度可达 ?(?) ,但其通用性 相对较差。 11.1.2 理想排序算法 运行快、原地、稳定、正向自适应、通用性好。显然 ?? 表的尺寸为 (? + 1) × (??? + 1) 。 第二步:找出最优子结构,进而推导出状态转移方程 本题与完全背包问题的状态转移方程存在以下两点差异。 ‧ 本题要求最小值,因此需将运算符 max() 更改为 min() 。 ‧ 优化主体是硬币数量而非商品价值,因此在选中硬币时执行 +1 即可。 ??[?, ?] = min(??[? − 1, ?], ??[?, ? − ??? 出目标金额,因此使 用 ??? + 1 来表示“无法凑出目标金额”的无效解。 ‧ 零钱兑换问题 II 从求“最少硬币数量”改为求“硬币组合数量”,状态转移方程相应地从 min() 改为 求和运算符。 编辑距离问题 ‧ 编辑距离(Levenshtein 距离)用于衡量两个字符串之间的相似度,其定义为从一个字符串到另一个 字符串的最少编辑步数,编辑操作包括添加、删除、替换。 ‧ 编辑距离问题的状态定义为将0 码力 | 378 页 | 18.45 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版性能可能劣化,因此被视为负面属性;而如果最佳时间复杂度优于平均时间复杂度,则被视为正面属性。 是否基于比较:基于比较的排序依赖比较运算符(<、=、>)来判断元素的相对顺序,从而排序整个数组, 理论最优时间复杂度为 ?(? log ?) 。而非比较排序不使用比较运算符,时间复杂度可达 ?(?) ,但其通用性 相对较差。 11.1.2 理想排序算法 运行快、原地、稳定、正向自适应、通用性好。显然 第二步:找出最优子结构,进而推导出状态转移方程 本题与完全背包问题的状态转移方程存在以下两点差异。 第 14 章 动态规划 hello‑algo.com 331 ‧ 本题要求最小值,因此需将运算符 max() 更改为 min() 。 ‧ 优化主体是硬币数量而非商品价值,因此在选中硬币时执行 +1 即可。 ??[?, ?] = min(??[? − 1, ?], ??[?, ? − ??? 出目标金额,因此使 用 ??? + 1 来表示“无法凑出目标金额”的无效解。 ‧ 零钱兑换问题 II 从求“最少硬币数量”改为求“硬币组合数量”,状态转移方程相应地从 min() 改为 求和运算符。 编辑距离问题 ‧ 编辑距离(Levenshtein 距离)用于衡量两个字符串之间的相似度,其定义为从一个字符串到另一个 字符串的最少编辑步数,编辑操作包括添加、删除、替换。 ‧ 编辑距离问题的状态定义为将0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版性能可能劣化,因此被视为负面属性;而如果最佳时间复杂度优于平均时间复杂度,则被视为正面属性。 是否基于比较:基于比较的排序依赖比较运算符(<、=、>)来判断元素的相对顺序,从而排序整个数组, 理论最优时间复杂度为 ?(? log ?) 。而非比较排序不使用比较运算符,时间复杂度可达 ?(?) ,但其通用性 相对较差。 11.1.2 理想排序算法 运行快、原地、稳定、正向自适应、通用性好。显然 ?? 表的尺寸为 (? + 1) × (??? + 1) 。 第二步:找出最优子结构,进而推导出状态转移方程 本题与完全背包问题的状态转移方程存在以下两点差异。 ‧ 本题要求最小值,因此需将运算符 max() 更改为 min() 。 ‧ 优化主体是硬币数量而非商品价值,因此在选中硬币时执行 +1 即可。 ??[?, ?] = min(??[? − 1, ?], ??[?, ? − ??? 出目标金额,因此使 用 ??? + 1 来表示“无法凑出目标金额”的无效解。 ‧ 零钱兑换问题 II 从求“最少硬币数量”改为求“硬币组合数量”,状态转移方程相应地从 min() 改为 求和运算符。 编辑距离问题 ‧ 编辑距离(Levenshtein 距离)用于衡量两个字符串之间的相似度,其定义为从一个字符串到另一个 字符串的最少编辑步数,编辑操作包括添加、删除、替换。 ‧ 编辑距离问题的状态定义为将0 码力 | 383 页 | 18.49 MB | 1 年前3
共 23 条
- 1
- 2
- 3













