From d44f5032d0f53256b2d5aef505d6b593fd3cd158 Mon Sep 17 00:00:00 2001 From: Irvin Date: Wed, 16 Feb 2022 02:14:18 +0800 Subject: fix yari h2m dry run errors (zh-CN) --- .../control_flow_and_error_handling/index.html | 20 +- .../guide/details_of_the_object_model/index.html | 18 +- .../guide/expressions_and_operators/index.html | 26 +- .../web/javascript/guide/functions/index.html | 26 +- .../javascript/guide/grammar_and_types/index.html | 8 +- files/zh-cn/web/javascript/guide/index.html | 291 +++++++++++++-------- .../guide/indexed_collections/index.html | 8 +- .../web/javascript/guide/introduction/index.html | 4 +- .../guide/iterators_and_generators/index.html | 2 +- .../zh-cn/web/javascript/guide/modules/index.html | 36 +-- .../regular_expressions/assertions/index.html | 8 +- .../character_classes/index.html | 4 +- .../groups_and_ranges/index.html | 8 +- .../guide/regular_expressions/index.html | 4 +- .../unicode_property_escapes/index.html | 12 +- .../web/javascript/guide/using_promises/index.html | 6 +- .../guide/working_with_objects/index.html | 4 +- 17 files changed, 275 insertions(+), 210 deletions(-) (limited to 'files/zh-cn/web/javascript/guide') diff --git a/files/zh-cn/web/javascript/guide/control_flow_and_error_handling/index.html b/files/zh-cn/web/javascript/guide/control_flow_and_error_handling/index.html index 4ec8d52e11..cc837aafb0 100644 --- a/files/zh-cn/web/javascript/guide/control_flow_and_error_handling/index.html +++ b/files/zh-cn/web/javascript/guide/control_flow_and_error_handling/index.html @@ -95,12 +95,13 @@ alert(x); // 输出的结果为 2

不建议在条件表达式中使用赋值语句,因为在快速查阅代码时容易把它看成等值比较。例如,不要使用下面的代码:

-
-

   if(x = y){

- -

 /*  语句  */

- -

}

+
+

警告:

+
+  if(x = y){
+    /*  语句  */
+  }
+

如果你需要在条件表达式中使用赋值,通常在赋值语句前后额外添加一对括号。例如: 

@@ -231,9 +232,8 @@ throw {toString: function() { return "I'm an object!"; } }; -
注意:你可以在抛出异常时声明一个对象。那你就可以在catch块中查询到对象的属性。 - - +
+

备注:你可以在抛出异常时声明一个对象。那你就可以在catch块中查询到对象的属性。

// Create an object type UserException
@@ -406,7 +406,7 @@ catch (e) {
  
  • settled:Promise 处于 fulfilled 或 rejected 二者中的任意一个状态, 不会是 pending。
  • -

    +

    通过 XHR 加载图片

    diff --git a/files/zh-cn/web/javascript/guide/details_of_the_object_model/index.html b/files/zh-cn/web/javascript/guide/details_of_the_object_model/index.html index 7df37741c4..17e15ee9bc 100644 --- a/files/zh-cn/web/javascript/guide/details_of_the_object_model/index.html +++ b/files/zh-cn/web/javascript/guide/details_of_the_object_model/index.html @@ -31,8 +31,8 @@ translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model

    JavaScript 大体上与之类似,但并没有专门的类定义,你通过定义构造函数的方式来创建一系列有着特定初始值和方法的对象。任何JavaScript函数都可以被用作构造函数。你也可以使用 new 操作符来创建一个新对象。

    -
    -

    提示:在ES6中引入了 类定义 ,但它实际上是已有的原型继承方式的语法糖而已,并没有引入新的面向对象继承模型。

    +
    +

    备注:在ES6中引入了 类定义 ,但它实际上是已有的原型继承方式的语法糖而已,并没有引入新的面向对象继承模型。

    子类和继承

    @@ -227,7 +227,7 @@ public class Engineer extends WorkerBee {

    使用这些定义,您可以创建这些对象的实例,以获取其属性的默认值。下图说明了如何使用这些 JavaScript 定义创建新对象并显示新对象的属性值。

    -

    提示:实例在基于类的语言中具有特定的技术含义。在这些语言中,一个实例是一个类的单独实例化,与一个类本质上是不同的。在 JavaScript 中,“实例”没有这个技术含义,因为JavaScript在类和实例之间不存在这样的区别。然而,在讨论 JavaScript 时,可以非正式地使用“实例”来表示使用特定构造函数创建的对象。 所以,在这个例子中,你可以非正式地说janeEngineer的一个实例。同样,虽然术语 parent,child,ancestor 和 descendant 在 JavaScript 中没有正式含义;你可以非正式地使用它们来引用原型链中较高或更低的对象。

    +

    备注:实例在基于类的语言中具有特定的技术含义。在这些语言中,一个实例是一个类的单独实例化,与一个类本质上是不同的。在 JavaScript 中,“实例”没有这个技术含义,因为JavaScript在类和实例之间不存在这样的区别。然而,在讨论 JavaScript 时,可以非正式地使用“实例”来表示使用特定构造函数创建的对象。 所以,在这个例子中,你可以非正式地说janeEngineer的一个实例。同样,虽然术语 parent,child,ancestor 和 descendant 在 JavaScript 中没有正式含义;你可以非正式地使用它们来引用原型链中较高或更低的对象。

    用简单的定义创建对象

    @@ -310,14 +310,14 @@ mark.projects = ["navigator"];

    只要 JavaScript 执行了该语句,则 mark 对象也将具有 specialty 属性,其值为 "none"。下图则表示了在 Employee 原型中添加该属性,然后在 Engineer 的原型中重载该属性的效果。

    -


    +


    添加属性

    更灵活的构造器

    到目前为止,本文所展示的构造函数都不能让你在创建新实例时为其制定属性值。其实我们也可以像 Java 一样,为构造器提供参数以初始化实例的属性值。下图展示了一种实现方式。

    -


    +


    Specifying properties in a constructor, take 1

    下面的表格中罗列了这些对象在 Java 和 JavaScript 中的定义。

    @@ -420,7 +420,7 @@ public class Engineer extends WorkerBee {

    JavaScript 的逻辑或操作符(||)会对第一个参数进行判断。如果该参数值运算后结果为真,则操作符返回该值。否则,操作符返回第二个参数的值。因此,这行代码首先检查 name 是否是对name 属性有效的值。如果是,则设置其为 this.name 的值。否则,设置 this.name 的值为空的字符串。尽管这种用法乍看起来有些费解,为了简洁起见,本章将使用这种习惯用法。

    -

    提示:如果调用构造函数时,指定了可以转换为 false 的参数(比如0和空字符串),结果可能出乎调用者意料。此时,将使用默认值(译注:不是指定的参数值 0 和 "")。

    +

    备注:如果调用构造函数时,指定了可以转换为 false 的参数(比如0和空字符串),结果可能出乎调用者意料。此时,将使用默认值(译注:不是指定的参数值 0 和 "")。

    使用这些定义,当创建对象的实例时,可以为本地定义的属性指定值。你可以使用以下语句创建一个新的Engineer

    @@ -440,7 +440,7 @@ jane.machine == "belau"

    到目前为止,构造函数已经能够创建一个普通对象,然后为新对象指定本地的属性和属性值。您还可以通过直接调用原型链上的更高层次对象的构造函数,让构造器添加更多的属性。下图即实现了这一功能。

    -


    +


    Specifying properties in a constructor, take 2

    我们来详细看一下这些定义。这是Engineer构造函数的新定义:

    @@ -636,7 +636,9 @@ chris.__proto__.__proto__.__proto__.__proto__.__proto__ == null; } -
    Note: 在上面的实现中,检查对象的类型是否为 "xml" 的目的在于解决新近版本的 JavaScript 中表达 XML 对象的特异之处。如果您想了解其中琐碎细节,可以参考 {{ bug(634150) }}。
    +
    +

    备注: 在上面的实现中,检查对象的类型是否为 "xml" 的目的在于解决新近版本的 JavaScript 中表达 XML 对象的特异之处。如果您想了解其中琐碎细节,可以参考 {{ bug(634150) }}。

    +
    使用上面定义的 instanceOf 函数,这些表达式为真:
    diff --git a/files/zh-cn/web/javascript/guide/expressions_and_operators/index.html b/files/zh-cn/web/javascript/guide/expressions_and_operators/index.html index be9944cc48..20ac54e8b8 100644 --- a/files/zh-cn/web/javascript/guide/expressions_and_operators/index.html +++ b/files/zh-cn/web/javascript/guide/expressions_and_operators/index.html @@ -136,7 +136,7 @@ translation_of: Web/JavaScript/Guide/Expressions_and_Operators

    对于更复杂的赋值,解构赋值语法是一个能从数组或对象对应的数组结构或对象字面量里提取数据的 Javascript 表达式。

    -
    var foo = ["one", "two", "three"];
    +
    var foo = ["one", "two", "three"];
     
     // 不使用解构
     var one   = foo[0];
    @@ -150,7 +150,7 @@ var [one, two, three] = foo;

    比较运算符比较它的操作数并返回一个基于表达式是否为真的逻辑值。操作数可以是数字,字符串,逻辑,对象值。字符串比较是基于标准的字典顺序,使用Unicode值。在多数情况下,如果两个操作数不是相同的类型, JavaScript 会尝试转换它们为恰当的类型来比较。这种行为通常发生在数字作为操作数的比较。类型转换的例外是使用 ===!== 操作符,它们会执行严格的相等和不相等比较。这些运算符不会在检查相等之前转换操作数的类型。下面的表格描述了该示例代码中的各比较运算符

    -
    var var1 = 3;
    +
    var var1 = 3;
     var var2 = 4;
    @@ -217,7 +217,7 @@ var var2 = 4;
    -

    注意: =>) 不是运算符,而是箭头函数的标记符号 。

    +

    备注:=>) 不是运算符,而是箭头函数的标记符号 。

    算术运算符

    @@ -376,12 +376,10 @@ var var2 = 4;
  • 操作数被转换为32bit整數,以位序列(0和1组成)表示.若超過32bits,則取低位32bit,如下所示:
  • -
    -
    -
    Before: 11100110111110100000000000000110000000000001
    -After:              10100000000000000110000000000001
    -
    -
    +
    +  Before: 11100110111110100000000000000110000000000001
    +  After:              10100000000000000110000000000001
    +
    • 第一个操作数的每一位都与第二个操作数的对应位组对: 第一位对应第一位,第二位对应第二位,以此类推.
    • @@ -551,7 +549,7 @@ var n3 = !"Cat"; // !t returns false

      例如,

      -
      console.log("my " + "string"); // console logs the string "my string".
      +
      console.log("my " + "string"); // console logs the string "my string".

      简写操作符 += 也可以用来拼接字符串,例如:

      @@ -719,11 +717,11 @@ void expression

      如下创建了一个超链接文本,当用户单击该文本时,不会有任何效果。

      -
      <a href="javascript:void(0)">Click here to do nothing</a>
      +
      <a href="javascript:void(0)">Click here to do nothing</a>

      下面的代码创建了一个超链接,当用户单击它时,提交一个表单。

      -
      <a href="javascript:void(document.form.submit())">
      +
      <a href="javascript:void(document.form.submit())">
       Click here to submit</a>

      关系操作符

      @@ -913,7 +911,7 @@ this.propertyName

      分组操作符()控制了表达式中计算的优先级. 举例来说, 你可以改变先乘除后加减的顺序,转而先计算加法。

      -
      var a = 1;
      +
      var a = 1;
       var b = 2;
       var c = 3;
       
      @@ -941,7 +939,7 @@ a * c + b * c // 9

      Comprehensions特性被许多编程语言所采用,该特性能够使你快速地通过一个已有的数组来创建出一个新的数组,比如:

      -
      [for (i of [ 1, 2, 3 ]) i*i ];
      +
      [for (i of [ 1, 2, 3 ]) i*i ];
       // [ 1, 4, 9 ]
       
       var abc = [ "A", "B", "C" ];
      diff --git a/files/zh-cn/web/javascript/guide/functions/index.html b/files/zh-cn/web/javascript/guide/functions/index.html
      index 73a1efbdc4..e37f71e8a8 100644
      --- a/files/zh-cn/web/javascript/guide/functions/index.html
      +++ b/files/zh-cn/web/javascript/guide/functions/index.html
      @@ -85,7 +85,7 @@ console.log(factorial(3));
       
       

      下面的代码:

      -
      function map(f, a) {
      +
      function map(f, a) {
         let result = []; // 创建一个数组
         let i; // 声明一个值,用来循环
         for (i = 0; i != a.length; i++)
      @@ -133,10 +133,10 @@ function square(n) { return n*n }
       

      函数域是指函数声明时的所在的地方,或者函数在顶层被声明时指整个程序。

      -

      提示:注意只有使用如上的语法形式(即 function funcName(){})才可以。而下面的代码是无效的。就是说,函数提升仅适用于函数声明,而不适用于函数表达式。

      +

      备注:注意只有使用如上的语法形式(即 function funcName(){})才可以。而下面的代码是无效的。就是说,函数提升仅适用于函数声明,而不适用于函数表达式。

      -
      console.log(square); // square is hoisted with an initial value undefined.
      +
      console.log(square); // square is hoisted with an initial value undefined.
       console.log(square(5)); // Uncaught TypeError: square is not a function
       const square = function (n) {
         return n * n;
      @@ -167,7 +167,7 @@ e = factorial(5); // 120赋值给e
       
       

      还有其它的方式来调用函数。常见的一些情形是某些地方需要动态调用函数,或者函数的实参数量是变化的,或者调用函数的上下文需要指定为在运行时确定的特定对象。显然,函数本身就是对象,因此这些对象也有方法(参考{{jsxref("Function")}} )。作为此中情形之一,{{jsxref("Function.apply", "apply()")}}方法可以实现这些目的。

      -

      函数作用域

      +

      函数作用域

      在函数内定义的变量不能在函数之外的任何地方访问,因为变量仅仅在该函数的域的内部有定义。相对应的,一个函数可以访问定义在其范围内的任何变量和函数。换言之,定义在全局域中的函数可以访问所有定义在全局域中的变量。在另一个函数中定义的函数也可以访问在其父函数中定义的所有变量和父函数有权访问的任何其他变量。

      @@ -442,8 +442,8 @@ pet.getName(); // Oliver getCode(); // Returns the secret code
      -
      -

      尽管有上述优点,使用闭包时仍然要小心避免一些陷阱。如果一个闭包的函数定义了一个和外部函数的某个变量名称相同的变量,那么这个闭包将无法引用外部函数的这个变量。

      +
      +

      备注:尽管有上述优点,使用闭包时仍然要小心避免一些陷阱。如果一个闭包的函数定义了一个和外部函数的某个变量名称相同的变量,那么这个闭包将无法引用外部函数的这个变量。

      var createPet = function(name) {  // Outer function defines a variable called "name"
         return {
      @@ -468,7 +468,7 @@ getCode();    // Returns the secret code
       
       

      例如,设想有一个用来连接字符串的函数。唯一事先确定的参数是在连接后的字符串中用来分隔各个连接部分的字符(译注:比如例子里的分号“;”)。该函数定义如下:

      -
      function myConcat(separator) {
      +
      function myConcat(separator) {
          var result = ''; // 把值初始化成一个字符串,这样就可以用来保存字符串了!!
          var i;
          // iterate through arguments
      @@ -490,7 +490,9 @@ myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
       myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
       
      -
      提示:arguments变量只是 类数组对象“,并不是一个数组。称其为类数组对象是说它有一个索引编号和length属性。尽管如此,它并不拥有全部的Array对象的操作方法。
      +
      +

      备注:arguments变量只是 类数组对象“,并不是一个数组。称其为类数组对象是说它有一个索引编号和length属性。尽管如此,它并不拥有全部的Array对象的操作方法。

      +

      更多信息请阅读JavaScript参考里的{{jsxref("Function")}}一文。

      @@ -544,7 +546,7 @@ console.log(arr); // [2, 4, 6]

      在一些函数模式中,更简洁的函数很受欢迎。对比一下:

      -
      var a = [
      +
      var a = [
         "Hydrogen",
         "Helium",
         "Lithium",
      @@ -563,7 +565,7 @@ console.log(a3); // logs [ 8, 6, 7, 9 ]

      在箭头函数出现之前,每一个新函数都重新定义了自己的 this 值(在构造函数中是一个新的对象;在严格模式下是未定义的;在作为“对象方法”调用的函数中指向这个对象;等等)。以面向对象的编程风格,这样着实有点恼人。

      -
      function Person() {
      +
      function Person() {
         // 构造函数Person()将`this`定义为自身
         this.age = 0;
       
      @@ -579,7 +581,7 @@ var p = new Person();

      在ECMAScript 3/5里,通过把this的值赋值给一个变量可以修复这个问题。

      -
      function Person() {
      +
      function Person() {
         var self = this; // 有的人习惯用`that`而不是`self`,
                          // 无论你选择哪一种方式,请保持前后代码的一致性
         self.age = 0;
      @@ -594,7 +596,7 @@ var p = new Person();

      箭头函数捕捉闭包上下文的this值,所以下面的代码工作正常。

      -
      function Person(){
      +
      function Person(){
         this.age = 0;
       
         setInterval(() => {
      diff --git a/files/zh-cn/web/javascript/guide/grammar_and_types/index.html b/files/zh-cn/web/javascript/guide/grammar_and_types/index.html
      index 7fb7d70567..4ac46cbc48 100644
      --- a/files/zh-cn/web/javascript/guide/grammar_and_types/index.html
      +++ b/files/zh-cn/web/javascript/guide/grammar_and_types/index.html
      @@ -357,7 +357,7 @@ console.log(a.length); // 1
       console.log(a[0]); // 3
      -

      注意 这里的数组字面值也是一种对象初始化器。参考对象初始化器的使用

      +

      备注: 这里的数组字面值也是一种对象初始化器。参考对象初始化器的使用

      若在顶层(全局)脚本里用字面值创建数组,JavaScript语言将会在每次对包含该数组字面值的表达式求值时解释该数组。另一方面,在函数中使用的数组,将在每次调用函数时都会被创建一次。

      @@ -376,7 +376,7 @@ console.log(a[0]); // 3

      如果你在元素列表的尾部添加了一个逗号,它将会被忽略。在下面的例子中,数组的长度是3,并不存在myList[3]这个元素(译注:这是指数组的第4个元素噢,作者是在帮大家复习数组元素的排序命名方法)。元素列表中其它所有的逗号都表示一个新元素(的开始)。

      -

      注意:尾部的逗号在早期版本的浏览器中会产生错误,因而编程时的最佳实践方式就是移除它们。

      +

      备注:尾部的逗号在早期版本的浏览器中会产生错误,因而编程时的最佳实践方式就是移除它们。

      (译注:而“现代”的浏览器似乎鼓励这种方式,这也很好解释原因。尾部逗号可以减少向数组的最后添加元素时,因为忘记为这最后一个元素加逗号 所造成的错误。)

      @@ -495,7 +495,7 @@ console.log(unusualPropertyNames["!"]); // Bang!

      在ES2015,对象字面值扩展支持在创建时设置原型,简写了 foo: foo 形式的属性赋值,方法定义,支持父方法调用,以及使用表达式动态计算属性名。总之,这些也使对象字面值和类声明更加紧密地联系起来,让基于对象的设计从这些便利中更加受益。

      -
      var obj = {
      +
      var obj = {
           // __proto__
           __proto__: theProtoObj,
           // Shorthand for ‘handler: handler’
      @@ -523,7 +523,7 @@ console.log(foo["2"]); // two

      一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。下面是一个正则表达式文字的一个例子。

      -
      var re = /ab+c/;
      +
      var re = /ab+c/;

      字符串字面量 (String literals)

      diff --git a/files/zh-cn/web/javascript/guide/index.html b/files/zh-cn/web/javascript/guide/index.html index 7917823730..419d7d24e7 100644 --- a/files/zh-cn/web/javascript/guide/index.html +++ b/files/zh-cn/web/javascript/guide/index.html @@ -10,126 +10,189 @@ translation_of: Web/JavaScript/Guide

      JavaScript 指南向你介绍如何使用 JavaScript,并且给出了语言概述。如果你需要了解某些语言特性的详细信息,请参阅 JavaScript 参考

      -

      章节

      - -

      本指南分为以下章节:

      - -
      -

      注意: 以上代码,数组长度(arrayLength)必须为一个数字(Number)。否则,将会创建一个只有单个(所输入的)元素的数组。 调用 arr.length 会返回数组长度,但是数组实际上包含了空的(undefined)元素。 因此在数组上使用 for...in 循环,将不会返回任何的值 。

      +

      备注:以上代码,数组长度(arrayLength)必须为一个数字(Number)。否则,将会创建一个只有单个(所输入的)元素的数组。 调用 arr.length 会返回数组长度,但是数组实际上包含了空的(undefined)元素。 因此在数组上使用 for...in 循环,将不会返回任何的值 。

      除了如上所示创建新定义的变量,数组(array)也可以作为一个属性(property)分配给一个新的或者已存在的对象(object):

      @@ -82,7 +82,7 @@ emp[2] = "August West";
      -

      注意:如果你在以上代码中给数组操作符的是一个非整形数值,那么将作为一个代表数组的对象的属性(property)创建,而非作为数组的元素。

      +

      备注:如果你在以上代码中给数组操作符的是一个非整形数值,那么将作为一个代表数组的对象的属性(property)创建,而非作为数组的元素。

      var arr = [];
      @@ -107,7 +107,7 @@ var myArray = ["Mango", "Apple", "Orange"]
       

      你可以用 myArray[0]引用第一个元素,myArray[1]引用第二个元素。元素的索引是从0开始的。

      -

      注意:数组操作符(方括号 [ ])也可以用来访问数组的属性(在 JavaScript 中,数组也是对象)。例如:

      +

      备注:数组操作符(方括号 [ ])也可以用来访问数组的属性(在 JavaScript 中,数组也是对象)。例如:

      var arr = ["one", "two", "three"];
      @@ -461,7 +461,7 @@ var interpolatedZeros = [c+'0' for (c of str) ].join(''); // 'a0b0c0d0e0f0'
       
       

      为了实现最大的灵活性和效率,JavaScript类型数组被分解为缓冲(Buffer)和视图(views)。缓冲(由{{jsxref("ArrayBuffer")}} 实现)是代表数据块的对象,它没有格式可言,并没有提供任何机制来访问其内容。为了访问包含在缓冲区中的内存,您需要使用视图。视图提供了一个上下文,即数据类型、起始偏移量和元素数,这些元素将数据转换为实际类型数组。

      -

      Typed arrays in an ArrayBuffer

      +

      Typed arrays in an ArrayBuffer

      ArrayBuffer

      diff --git a/files/zh-cn/web/javascript/guide/introduction/index.html b/files/zh-cn/web/javascript/guide/introduction/index.html index f6a85d1e2d..36bcfc6639 100644 --- a/files/zh-cn/web/javascript/guide/introduction/index.html +++ b/files/zh-cn/web/javascript/guide/introduction/index.html @@ -111,7 +111,7 @@ translation_of: Web/JavaScript/Guide/Introduction

      在火狐浏览器菜单栏的 “工具" => "Web开发者" => "Web控制台" 可以打开控制台( 在Windows和Linux上Ctrl+Shift+K ,Mac上Cmd+Option+K) ,它会如期出现在浏览器窗口的底部。如图,最下一行就是可以执行输入的命令行,面板上可以显示执行结果:

      -

      +

      控制台的工作方式与eval完全相同:返回最后输入的表达式。为了简单起见,可以想象每次输入到控制台的东西实际上都被 console.log 所包围。

      @@ -125,7 +125,7 @@ translation_of: Web/JavaScript/Guide/Introduction

      如果你选择显示,草稿纸中的代码会在浏览器中执行,并在内容后面以注释的形式插入返回的结果:

      -

      +

      Hello world

      diff --git a/files/zh-cn/web/javascript/guide/iterators_and_generators/index.html b/files/zh-cn/web/javascript/guide/iterators_and_generators/index.html index 1694adbd61..9e5bbe3cbd 100644 --- a/files/zh-cn/web/javascript/guide/iterators_and_generators/index.html +++ b/files/zh-cn/web/javascript/guide/iterators_and_generators/index.html @@ -70,7 +70,7 @@ console.log("Iterated over sequence of size: ", result.value); // 5
      -

      反射性地知道特定对象是否是迭代器是不可能的。 如果您需要这样做,请使用 Iterables.

      +

      备注:反射性地知道特定对象是否是迭代器是不可能的。 如果您需要这样做,请使用 Iterables.

      生成器函数

      diff --git a/files/zh-cn/web/javascript/guide/modules/index.html b/files/zh-cn/web/javascript/guide/modules/index.html index 3ad682563c..e3db44e9a0 100644 --- a/files/zh-cn/web/javascript/guide/modules/index.html +++ b/files/zh-cn/web/javascript/guide/modules/index.html @@ -39,8 +39,8 @@ translation_of: Web/JavaScript/Guide/Modules

      这的确有点简单,但是保持足够简单能够清晰地演示模块。

      -
      -

      Note: 如果你想去下载这个例子在本地运行,你需要通过本地 web 服务器去运行。

      +
      +

      备注:如果你想去下载这个例子在本地运行,你需要通过本地web 服务器去运行。

      基本的示例文件的结构

      @@ -53,8 +53,8 @@ modules/ canvas.mjs square.mjs
      -
      -

      Note: 在这个指南的全部示例项目的文件结构是基本相同的; 需要熟悉上面的内容

      +
      +

      备注:在这个指南的全部示例项目的文件结构是基本相同的; 需要熟悉上面的内容

      modules 目录下的两个模块的描述如下:

      @@ -77,8 +77,8 @@ modules/
    -
    -

    Note: 在原生JavaScript模块中, 扩展名 .mjs 非常重要,因为使用 MIME-type 为javascript/esm 来导入文件(其他的JavaScript 兼容 MIME-type 像 application/javascript 也可以), 它避免了严格的 MIME 类型检查错误,像 "The server responded with a non-JavaScript MIME type". 除此之外,  .mjs 的扩展名很明了(比如这个就是一个模块,而不是一个传统 JavaScript文件),还能够和其他工具互相适用. 看这个 Google's note for further details.

    +
    +

    备注:在原生JavaScript模块中, 扩展名 .mjs 非常重要,因为使用 MIME-type 为javascript/esm 来导入文件(其他的JavaScript 兼容 MIME-type 像 application/javascript 也可以), 它避免了严格的 MIME 类型检查错误,像 "The server responded with a non-JavaScript MIME type". 除此之外,  .mjs 的扩展名很明了(比如这个就是一个模块,而不是一个传统 JavaScript文件),还能够和其他工具互相适用. 看这个 Google's note for further details.

    .mjs 与 .js

    @@ -151,8 +151,8 @@ export function draw(ctx, length, x, y, color) {

    你可以在main.mjs中看到这些。

    -
    -

    Note:在一些模块系统中你可以忽略文件扩展名(比如'/model/squre' .这在原生JavaScript 模块系统中不工作。此外,记住你需要包含最前面的正斜杠。   (修订版 1889482)

    +
    +

    备注:在一些模块系统中你可以忽略文件扩展名(比如'/model/squre' .这在原生JavaScript 模块系统中不工作。此外,记住你需要包含最前面的正斜杠。 (修订版 1889482)

    因为你导入了这些功能到你的脚本文件,你可以像定义在相同的文件中的一样去使用它。下面展示的是在 main.mjs 中的import 语句下面的内容。

    @@ -177,8 +177,8 @@ reportPerimeter(square1.length, reportList);

    你只能在模块内部使用 importexport 语句 ;不是普通脚本文件。

    -
    -

    Note: 您还可以将模块导入内部脚本,只要包含 type="module",例如 <script type="module"> //include script here </script>.

    +
    +

    备注:您还可以将模块导入内部脚本,只要包含 type="module",例如 <script type="module"> //include script here </script>.

    其他模块与标准脚本的不同

    @@ -216,8 +216,8 @@ reportPerimeter(square1.length, reportList);
    import {default as randomSquare} from './modules/square.mjs';
    -
    -

    Note: 重命名导出项的as语法在下面的{{anch("Renaming imports and exports")}}部分中进行了说明。

    +
    +

    备注:重命名导出项的as语法在下面的{{anch("Renaming imports and exports")}}部分中进行了说明。

    避免命名冲突

    @@ -362,8 +362,8 @@ square1.reportPerimeter();
    export * from 'x.mjs'
     export { name } from 'x.mjs'
    -
    -

    Note: 这实际上是导入后跟导出的简写,即“我导入模块x.mjs,然后重新导出部分或全部导出”。

    +
    +

    备注:这实际上是导入后跟导出的简写,即“我导入模块x.mjs,然后重新导出部分或全部导出”。

    有关示例,请参阅我们的module-aggregation。 在这个例子中(基于我们之前的类示例),我们有一个名为shapes.mjs的额外模块,它将circle.mjssquare.mjsriangle.mjs中的所有功能聚合在一起。 我们还将子模块移动到名为shapes的modules目录中的子目录中。 所以模块结构现在是这样的:

    @@ -388,12 +388,12 @@ export { Circle } from '/js-examples/modules/module-aggregation/modules/shapes/c

    它们从各个子模块中获取导出,并有效地从shapes.mjs模块中获取它们。

    -
    -

    Note: 即使shapes.mjs文件位于 modules 目录中,我们仍然需要相对于模块根目录编写这些URL,因此需要/modules/。 这是使用JavaScript模块时混淆的常见原因。

    +
    +

    备注:即使shapes.mjs文件位于modules目录中,我们仍然需要相对于模块根目录编写这些URL,因此需要/modules/。 这是使用JavaScript模块时混淆的常见原因。

    -
    -

    Note: shapes.mjs中引用的导出基本上通过文件重定向,并且实际上并不存在,因此您将无法在同一文件中编写任何有用的相关代码。

    +
    +

    备注:shapes.mjs中引用的导出基本上通过文件重定向,并且实际上并不存在,因此您将无法在同一文件中编写任何有用的相关代码。

    所以现在在main.mjs 文件中,我们可以通过替换来访问所有三个模块类

    diff --git a/files/zh-cn/web/javascript/guide/regular_expressions/assertions/index.html b/files/zh-cn/web/javascript/guide/regular_expressions/assertions/index.html index 0d3757acd6..783c2985e0 100644 --- a/files/zh-cn/web/javascript/guide/regular_expressions/assertions/index.html +++ b/files/zh-cn/web/javascript/guide/regular_expressions/assertions/index.html @@ -32,8 +32,8 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions

    匹配输入的开头。如果多行模式设为 true,^ 在换行符后也能立即匹配,比如 /^A/ 匹配不了 "an A" 里面的 "A",但是可以匹配 "An A" 里面第一个 "A"。

    -
    -

    ^ 出现在集合或范围开头时的含义与此不同(参见 group)。

    +
    +

    备注:^ 出现在集合或范围开头时的含义与此不同(参见 group)。

    @@ -71,8 +71,8 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions

    其他断言 

    -
    -

    提示:字符也可用作量词

    +
    +

    备注:字符也可用作量词

    diff --git a/files/zh-cn/web/javascript/guide/regular_expressions/character_classes/index.html b/files/zh-cn/web/javascript/guide/regular_expressions/character_classes/index.html index 84bf4e0090..09cf23daa0 100644 --- a/files/zh-cn/web/javascript/guide/regular_expressions/character_classes/index.html +++ b/files/zh-cn/web/javascript/guide/regular_expressions/character_classes/index.html @@ -130,8 +130,8 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes
  • For characters that are usually treated specially, indicates that the next character is not special and should be interpreted literally. For example, "*" is a special character that means 0 or more occurrences of the preceding character should be matched; for example, /a*/ means match 0 or more "a"s. To match * literally, precede it with a backslash; for example, /a\*/ matches "a*".
  • -
    -

    To match this character literally, escape it with itself. In other words to search for \ use /\\/.

    +
    +

    备注:To match this character literally, escape it with itself. In other words to search for \ use /\\/.

    diff --git a/files/zh-cn/web/javascript/guide/regular_expressions/groups_and_ranges/index.html b/files/zh-cn/web/javascript/guide/regular_expressions/groups_and_ranges/index.html index ac6334b3df..f0045774ff 100644 --- a/files/zh-cn/web/javascript/guide/regular_expressions/groups_and_ranges/index.html +++ b/files/zh-cn/web/javascript/guide/regular_expressions/groups_and_ranges/index.html @@ -46,8 +46,8 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges
    @@ -125,8 +125,8 @@ do { // Hellow 李 雷 // Hellow 韩 梅梅 -
    -

    Note: 并不是所有的浏览器都支持这个功能; 参考兼容表: compatibility table.

    +
    +

    备注: 并不是所有的浏览器都支持这个功能; 参考兼容表: compatibility table.

    技术指标

    diff --git a/files/zh-cn/web/javascript/guide/regular_expressions/index.html b/files/zh-cn/web/javascript/guide/regular_expressions/index.html index 945081c966..b8f02f1a9b 100644 --- a/files/zh-cn/web/javascript/guide/regular_expressions/index.html +++ b/files/zh-cn/web/javascript/guide/regular_expressions/index.html @@ -245,7 +245,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions /\w\b\w/将不能匹配任何字符串,因为在一个单词中间的字符永远也不可能同时满足没有“字”字符跟随和有“字”字符跟随两种情况。

    -

    注意: JavaScript的正则表达式引擎将特定的字符集定义为“字”字符。不在该集合中的任何字符都被认为是一个断词。这组字符相当有限:它只包括大写和小写的罗马字母,十进制数字和下划线字符。不幸的是,重要的字符,例如“é”或“ü”,被视为断词。

    +

    备注: JavaScript的正则表达式引擎将特定的字符集定义为“字”字符。不在该集合中的任何字符都被认为是一个断词。这组字符相当有限:它只包括大写和小写的罗马字母,十进制数字和下划线字符。不幸的是,重要的字符,例如“é”或“ü”,被视为断词。

    @@ -543,7 +543,7 @@ console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);

    当发生/d(b+)d/g使用两个不同状态的正则表达式对象,lastIndex属性会得到不同的值。如果你需要访问一个正则表达式的属性,则需要创建一个对象初始化生成器,你应该首先把它赋值给一个变量。

    -

    使用括号的子字符串匹配

    +

    使用括号的子字符串匹配

    一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素[1],……[n]。

    diff --git a/files/zh-cn/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html b/files/zh-cn/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html index cf8a7207b6..64254c284c 100644 --- a/files/zh-cn/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html +++ b/files/zh-cn/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html @@ -9,12 +9,12 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escape
    {{EmbedInteractiveExample("pages/js/regexp-unicode-property-escapes.html", "taller")}}
    -
    -

    Note: 使用 Unicode 属性转义依靠 \u 标识\u 表示该字符串被视为一串 Unicode 代码点。参考 RegExp.prototype.nicode.

    +
    +

    备注:使用 Unicode 属性转义依靠 \u 标识\u 表示该字符串被视为一串 Unicode 代码点。参考 RegExp.prototype.nicode.

    -
    -

    Note: 某些 Unicode 属性比字符类(如 \w 只匹配拉丁字母 a 到 z)包含更多的字符  ,但后者浏览器兼容性更好 (截至2020 一月).

    +
    +

    备注: 某些 Unicode 属性比字符类(如 \w 只匹配拉丁字母 a 到 z)包含更多的字符  ,但后者浏览器兼容性更好 (截至2020 一月).

    句法

    @@ -48,8 +48,8 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escape
    很多值有同名或简写(e.g. 对应着 General_Category 属性名的属性值 Decimal_Number 可以写作 Nd, digit, 或 Decimal_Number). 大多数属性值的 Unicode属性名 和等号可以省去。如果想明确某 Unicode属性名,必须给出它的值。
    -
    -

    Note: 因为可使用的属性和值太多,这里不一一赘述,仅提供几个例子。

    +
    +

    备注: 因为可使用的属性和值太多,这里不一一赘述,仅提供几个例子。

    基本原理

    diff --git a/files/zh-cn/web/javascript/guide/using_promises/index.html b/files/zh-cn/web/javascript/guide/using_promises/index.html index 22a0163216..5d7c65bf68 100644 --- a/files/zh-cn/web/javascript/guide/using_promises/index.html +++ b/files/zh-cn/web/javascript/guide/using_promises/index.html @@ -36,13 +36,13 @@ createAudioFileAsync(audioSettings, successCallback, failureCallback)

    如果函数 createAudioFileAsync() 被重写为返回 Promise 的形式,那么我们可以像下面这样简单地调用它:

    -
    const promise = createAudioFileAsync(audioSettings);
    +
    const promise = createAudioFileAsync(audioSettings);
     promise.then(successCallback, failureCallback);
     

    或者简写为:

    -
    createAudioFileAsync(audioSettings).then(successCallback, failureCallback);
    +
    createAudioFileAsync(audioSettings).then(successCallback, failureCallback);
     

    我们把这个称为 异步函数调用,这种形式有若干优点,下面我们将会逐一讨论。

    @@ -65,7 +65,7 @@ promise.then(successCallback, failureCallback);

    见证奇迹的时刻:then() 函数会返回一个和原来不同的新的 Promise

    -
    const promise = doSomething();
    +
    const promise = doSomething();
     const promise2 = promise.then(successCallback, failureCallback);
     
    diff --git a/files/zh-cn/web/javascript/guide/working_with_objects/index.html b/files/zh-cn/web/javascript/guide/working_with_objects/index.html index dbdc3294a6..3cde5dd29d 100644 --- a/files/zh-cn/web/javascript/guide/working_with_objects/index.html +++ b/files/zh-cn/web/javascript/guide/working_with_objects/index.html @@ -75,7 +75,7 @@ console.log(myObj); myCar[propertyName] = "Mustang";
    -

    你可以在  for...in 语句中使用方括号标记以枚举一个对象的所有属性。为了展示它如何工作,下面的函数当你将对象及其名称作为参数传入时,显示对象的属性:

    +

    你可以在  for...in 语句中使用方括号标记以枚举一个对象的所有属性。为了展示它如何工作,下面的函数当你将对象及其名称作为参数传入时,显示对象的属性:

    function showProps(obj, objName) {
       var result = "";
    @@ -491,7 +491,7 @@ fruit === fruitbear // return false
     
    -

    注意: "===" 运算符用来检查数值是否相等: 1 === "1"返回false,而1 == "1" 返回true

    +

    备注: "===" 运算符用来检查数值是否相等: 1 === "1"返回false,而1 == "1" 返回true

    // 两个变量, 同一个对象
    -- 
    cgit v1.2.3-54-g00ecf
    
    

    一个否定的或被补充的字符集。也就是说,它匹配任何没有包含在括号中的字符。可以通过使用连字符来指定字符范围,但是如果连字符作为方括号中的第一个或最后一个字符出现,那么它将被视为作为普通字符包含在字符集中。例如,[^abc]和[^a-c]一样。它们最初匹配“bacon”中的“o”和“chop”中的“h”。

    -
    -

     ^ 字符也可以表示   输入的起始

    +
    +

    备注: ^ 字符也可以表示   输入的起始