现代JavaScript学习记录

浪尽此生 提交于 2020-01-20 06:56:41

唠唠叨叨

今天就是最后一天了,很无聊,本来打算学一下RxJs,但转念一想还是学JS吧,因为之前学JS是边用边学的,就是用到哪块再去查,这样的学习不成体系,如果遇到意料之外的状况会显得像一个白痴,因此打算补一下JS的知识,把那些重要的、常见的、自己还不会的记录下来,以后方便查阅,就这样8.

1. < script>标签的故事

1.1 复杂的脚本应放在单独的文件中

一般来说,只有最简单的脚本才嵌入到 HTML 中。更复杂的脚本存放在单独的文件中。使用独立文件的好处是浏览器会下载它,然后将它保存到浏览器的缓存中。之后,其他页面想要相同的脚本就会从缓存中获取,而不是下载它。所以文件实际上只会下载一次。这可以节省流量,并使得页面(加载)更快。

1.2 如果设置了src属性,script标签内容将会被忽略

一个单独的 < script> 标签不能同时有 src 属性和内部包裹的代码。内部包裹的代码将不会工作。

1.3 总结

  • 我们可以使用一个 < script> 标签将 JavaScript 代码添加到页面中。
  • type 和 language 属性不是必需的。
  • 外部的脚本可以通过 的方式插入。

2. 代码相关

2.1 分号

JS其实是可以不写分号的,JS会自动判断哪里需要分号,但是,这种判断不一定总是正确的,因此程序员应该手动添加分号,尤其是新手,许多Lint工具默认设置行尾分号不是没有道理的。

2.2 注释

注释分为单行注释//,和多行注释/**/,要注意的是,多行分号不能嵌套多行注释。

3. 现代模式,“use strict”

长久以来,JavaScript 不断向前发展且并未带来任何兼容性问题。新的特性被加入,旧的功能也没有改变。

这么做有利于兼容旧代码,但缺点是 JavaScript 创造者的任何错误或不完善的决定也将永远被保留在 JavaScript 语言中。

这种情况一直持续到 2009 年 ECMAScript 5 (ES5) 的出现。ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能能够使用,大部分的修改是默认不生效的。你需要一个特殊的指令 —— “use strict” 来明确地激活这些特性。

“use strict”要么处于文档的最上面,使整个文档处于严格模式,要么处于函数上面,使函数体处于严格模式,而且严格模式是可进而不可退的,一旦处于严格模式就永远处于严格模式。

  • 一些新语言特性诸如 “classes” 和 “modules” 也会自动开启严格模式。
  • 所有的现代浏览器都支持严格模式。
  • 我们建议始终使用 “use strict” 启动脚本。本教程的所有例子都默认采用严格模式,除非特别指定(非常少)。

4. 数据类型

在 JavaScript 中有七种基本的数据类型。这一章我们会学习数据类型的基本知识,在下一章我们会对他们一一进行详细讲解。

4.1 number

number 类型代表整数和浮点数。除了常规的数字,还包括所谓的“特殊数值”也属于这种类型:Infinity、-Infinity 和 NaN。

NaN 代表一个计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果

NaN 是粘性的。任何对 NaN 的进一步操作都会返回 NaN:

alert( "not a number" / 2 + 5 ); // NaN

4.2 string

4.3 boolean

4.4 null

特殊的null值不属于上述任何一种类型。它构成了一个独立的类型,只包含null值。

4.5 undefined

特殊值undefined和null一样自成类型。undefined的含义是未被赋值。通常,使用 null 将一个“空”或者“未知”的值写入变量中,undefined 仅仅用于检验,查看变量是否被过赋值。

4.6 symbol

symbol 类型用于创建对象的唯一标识符。

4.7 object

其他所有的数据类型都被称为“原生类型”,因为它们的值只包含一个单独的内容(字符串、数字或者其他)。相反,object 则用于储存数据集合和更复杂的实体。

4.8 typeof 运算符

typeof 运算符返回参数的类型。当我们想要分别处理不同类型值的时候,或者想快速进行数据类型检验时,非常有用。

它支持两种语法形式:

  • 作为运算符:typeof x。
  • 函数形式:typeof(x)。

换言之,有括号和没有括号,得到的结果是一样的。对 typeof x 的调用会以字符串的形式返回数据类型

typeof null 的结果是 “object”。这其实是不对的。官方也承认了这是 typeof 运算符的问题,现在只是为了兼容性而保留了下来。当然,null 不是一个 object。null 有自己的类型,它是一个特殊值。再次强调,这是 JavaScript 语言的一个错误。

4.9 总结

JavaScript 中有七种基本的数据类型(译注:前六种为基本数据类型,也属于原生类型,而 object 为复杂数据类型)。

  • number 用于任何类型的数字:整数或浮点数。
  • string 用于字符串:一个字符串可以包含一个或多个字符,所以没有单独的单字符类型。
  • boolean 用于 true 和 false。
  • null 用于未知的值 —— 只有一个 null 值的独立类型。
  • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
  • symbol 用于唯一的标识符。
  • object 用于更复杂的数据结构。

我们可以通过 typeof 运算符查看存储在变量中的数据类型。两种形式:typeof x 或者 typeof(x)。以字符串的形式返回类型名称,例如 “string”。

typeof null 会返回 “object” —— 这是 JavaScript 编程语言的一个错误,实际上它并不是一个 object。

5. 类型转换

5.1 number类型转换

结果
undefined NaN
null 0
true 和 false 1 and 0
string 去掉首尾空格后如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当出现非数字字符时,类型转换出现error并返回 NaN。

当进行数字运算时,首先尝试字符串拼接运算,再尝试进行数字运算,数字运算的时候,若运算两边不为数值类型,将会进行类型转换。

因此,特别要注意,当执行加法运算时,会首先尝试字符串拼接。

5.2 Boolean类型转换

转换规则如下:

  • 直观上为“空”的值(如 0、空字符串、null、undefined 和 NaN)将变为 false。
  • 其他值变成 true。

5.3 总结

显示转换:String(value)、Number(value)、Boolean(value)。

6. 值的比较

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!