js

93 阅读5分钟

一、js基础知识

  • 标签script

  • 外部脚本<script scr=""><script>

  • 语句 :执行行为(action)的语法结构和命令。 格式:alert('---') ;

  • "use strict":保证旧的功能能够使用,大部分的修改是默认不生效的,需要一个特殊的指令 —— "use strict" 来明确地激活。(只能放在脚本文件最顶部,只有注释可以出现在其上面)

  • 变量:数据的“命名存储”,来保存商品、访客和其他信息。(格式:let ---="")旧版是var

有效的命名,例如:.jpeg

  • 常量 const ---=""(也可以使变量无法修改)
  • 数据类型:                                        七种原始数据类型(基本数据类型):
    • number 用于任何类型的数字:整数或浮点数,在** ±(253-1) 范围内的整数。数字可以有很多操作,比如,乘法 * 、除法 / 、加法 + 、减法 - 等等。除了常规的数字,还包括所谓的“特殊数值”(“ special numeric values ”)”也属于这种类型: Infinity 、 -Infinity 和 NaN 。

    • bigint 用于任意长度的整数。

    • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。 1.双引号: "Hello",2.单引号: 'Hello',   3.反引号:``。 内的表达式会被计算,计算结果会成为字符串的一.jpeg

    • boolean 用于 true 和 false 。

    • null 用于未知的值 —— 只有一个 null 值的独立类型。(例: let age = null;)

    • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。(1. let age;  2.alert(age); // 弹出"undefined")

    • symbol 用于唯一的标识符。                     一种非原始数据类型(复杂数据类型):

    • object 用于更复杂的数据结构。

  • 类型转换..?没看懂
  • 数学运算:加法 +, 减法 -,乘法 *, 除法 /,取余 %(a % b 的结果是 a 整除 b的余数, 求幂 **(求幂运算 a ** b 将 a 提升至 a 的 b 次幂).
  • 布尔转换?? 
  • 条件分支:以使用 if 语句和条件运算符 ?(也称为“问号”运算符)来实现
  • 空值合并运算符 ‘??’(例a ?? b 的结果是:如果 a 是已定义的,则结果为 a,如果 a 不是已定义的,则结果为 b)“|| ”返回第一个真值,“??” 返回第一个 已定义的值。
  • 循环:1.while (condition) {  }  2.do {// 循环体} while (condition); 循环首先执行循环体,然后检查条件,当条件为真时,重复执行循环体。3.for (begin; condition; step) {// ……循环体……}(如果 condition 成立 → 运行 body 然后运行 step) 4.无限循环while(true) 可以通过 break 指令来终止,如果不想在当前迭代中做任何事,并且想要转移至下一次迭代,可以使用 continue 指令。
  • “switch”语句??
  • 函数??

二、代码质量

1.JavaScript 库进行测试:

  • Mocha —— 核心框架:提供了包括通用型测试的主数 describe 和 it,以及用于运行测试的主函数。
  • Chai —— 提供很多断言(assertion)支持的库。它提供了很多不同的断言,现在我们只需要用 assert.equal。
  • Sinon —— 用于监视函数、模拟内建函数和其他函数的库。

2.行为驱动开发BDD:

(1)作为测试 —— 保证代码正确工作。

(2)作为文档 —— describe 和 it 的标题告诉我们函数做了什么。

(3)作为案例 —— 测试实际工作的例子展示了一个函数可以被怎样使用。

3.格式:

describe("title", function() { ... })

表示我们正在描述的功能是什么。在我们的例子中我们正在描述函数 pow。用于组织“工人(workers)” —— it 代码块。

it("use case description", function() { ... })

it 里面的描述部分,我们以一种易于理解的方式描述特定的用例,第二个参数是用于对其进行测试的函数。

assert.equal(value1, value2)

it 块中的代码,如果实现是正确的,它应该在执行的时候不产生任何错误。

assert.* 函数用于检查 pow 函数是否按照预期工作。

4.转译器(Transpilers):是一种可以将源码转译成另一种源码的特殊的软件。它可以解析(“阅读和理解”)现代代码,并使用旧的语法结构对其进行重写,进而使其也可以在旧的引擎中工作。

5.垫片(Polyfills):更新/添加新函数的脚本。

三、Object

1.文本和属性:创建对象的时候,立即将一些属性以键值对的形式放到 {...} 

2.计算属性:创建一个对象时,我们可以在对象字面量中使用方括号。(例:[fruit] 含义是属性名应该从 fruit 变量中获取。)

3.属性命名没有限制。属性名可以是任何字符串或者 symbol,其他类型会被自动地转换为字符串。

4.对象是具有一些特殊特性的关联数组。

它们存储属性(键值对),其中:

  • 属性的键必须是字符串或者 symbol(通常是字符串)。
  • 值可以是任何类型。

我们可以用下面的方法访问属性:

  • 点符号: obj.property。
  • 方括号 obj["property"],方括号允许从变量中获取键,例如 obj[varWithKey]。

其他操作:

  • 删除属性:delete obj.prop。
  • 检查是否存在给定键的属性:"key" in obj。
  • 遍历对象:for(let key in obj) 循环。

5.“this”:this 的值就是在点之前的这个对象,即调用该方法的对象。(this不受限制 在 JavaScript 中,this 关键字与其他大多数编程语言中的不同。JavaScript 中的 this 可以用于任何函数,即使它不是对象的方法。)

6.可选链(?.):?. 检查左边部分是否为 null/undefined,如果不是则继续运算。换句话说,例如 value?.prop:

  • 如果 value 存在,则结果与 value.prop 相同,
  • 否则(当 value 为 undefined/null 时)则返回 undefined。                 

7.symbol:唯一标识符的基本类型;是使用带有可选描述(name)的 Symbol() 调用创建的:总是不同的值,即使它们有相同的名字。

两个主要的使用场景:

(1)“隐藏” 对象属性。
如果我们想要向“属于”另一个脚本或者库的对象添加一个属性,我们可以创建一个 symbol 并使用它作为属性的键。symbol 属性不会出现在 for..in 中,因此它不会意外地被与其他属性一起处理。并且,它不会被直接访问,因为另一个脚本没有我们的 symbol。因此,该属性将受到保护,防止被意外使用或重写。

(2)JavaScript 使用了许多系统 symbol,这些 symbol 可以作为 Symbol.* 访问。我们可以使用它们来改变一些内建行为。

8.原始值转换?