作者: 2468工作室 发布日期:2020-06-12 16:16 查看次数:239
1、延迟执行:<script> 标签有一个布尔型属性 defer,设置该属性能够将 JavaScript 文件延迟到页面解析完毕后再运行。
2、异步执行:现在可以为 <script> 标签设置 async 属性,让浏览器异步加载 JavaScript 文件,即在加载 JavaScript 文件时,浏览器不会暂停,而是继续解析。这样能节省时间,提升响应速度。
(1、2说明:defer 属性适用于外部 JavaScript 文件,不适用于 <script>签包含的 JavaScript 脚本。因为saync属性是Html5的新增属性,异步执行,所以可以根据习惯继续把很多大型 JavaScript 库文件放在 <head> 标签内)
3、顺序执行:浏览器在解析 HTML 文档时,如果遇到第一个 <script> 标签,则 JavaScript 解释器会等到这个代码块的代码都加载完后,再对代码块进行预编译,然后执行。执行完毕,将继续解析后面的 HTML 代码,同时 JavaScript 解释器也准备好处理下一个代码块。
4、字符编码:JavaScript 遵循 Unicode 字符编码规则。Unicode 字符集中每个字符使用 2 个字节来表示,这意味着用户可以使用中文来命名 JavaScript 变量。
(Unicode 是 Latin-1 字符集的超集,编码数目达到百万级;Latin-1是 ASCII 字符集的扩展,包含 256 个拉丁字母; ASCII 字符集包含 128 个基本字符,即常用英文字母和符号。)
5、词法句法:词法定义了 JavaScript的基本名词规范,包括字符编码、命名规则、标识符、关键字、注释规则、 运算符和分隔符等。句法定义了 JavaScript的基本运算逻辑和程序结构,包括短语、句子和代码段的基本规则,如表达式、语句和程序结构等。(JavaScript 严格区分大小写)
6、直接量:直接量(Literal)就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表达式、对象直接量、数组直接量、函数直接量等。
//空字符串直接量
1 //数值直接量
true //布尔值直接量
/a/g //正则表达式直接量
null //特殊值直接量
{} //空对象直接量
[] //空数组直接量
function(){} //空函数直接量,也就是函数表达式
7、转义字符:由于各种原因,很多字符无法直接在代码中输入或输出,只能通过转义序列间接表示。
(Unicode 转义序列方法:\u + 4位十六进制数字。Latin-1 转义序列方法:\x + 2位十六进制数字)
序列 代表字符
\0 Null字符(\u0000)
\b 退格符(\u0008)
\t 水平制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\" 双引号(\u0022)
\' 撇号或单引号(\u0027)
\\ 反斜杠(\u005C)
\xXX 由 2 位十六进制数值 XX 指定的 Latin-1 字符
\uXXXX 由 4 位十六进制数值 XXXX 指定的 Unicode 字符
\XXX 由 1~3 位八进制数值(000 到 377)指定的 Latin-1 字符,可表示 256个 字符。如 \251 表示版本符号。注意,ECMAScript 3.0 不支持,考虑到兼容性不建议使用。
8、标识符规则:合法的标识符应该注意以下强制规则:
1) 第一个字符必须是字母、下划线(_)或美元符号($)。
2) 除了第一个字符外,其他位置可以使用 Unicode 字符。一般建议仅使用 ASCII 编码的字母,不建议使用双字节的字符。
3) 不能与 JavaScript 关键字、保留字重名。
4) 可以使用 Unicode 转义序列。例如,字符 a 可以使用“\u0061”表示。
9、关键字、保留字、全局变量和函数:关键字具有特定的用途,保留字目前还没有具体的用途,是为 JavaScript 升级版本预留备用的。用户也应该避免使用它们。
ECMAScript 关键字
break delete if this while
case do in throw with
catch else instanceof try
continue finally new typeof
debugger(ECMAScript 5 新增) for return var
default function switch void
ECMAScript 保留字
abstract double goto native static
boolean enum implements package super
byte export import private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile
JavaScript 预定义全局变量和函数
arguments encodeURL Infinity Number RegExp
Array encodeURLComponent isFinite Object String
Boolean Error isNaN parseFloat SyntaxError
Date eval JSON parseInt TypeError
decodeURL EvalError Math RangeError undefined
decodeURLComponent Function NaN ReferenceError URLError
10、注释:单行注释://单行注释信息。多行注释:/*多行注释信息*/。
11、声明变量:在 JavaScript 中,声明变量使用 var 语句。在一个 var 语句中,可以声明一个或多个变量,也可以为变量赋值,未赋值的变量初始化为 undefined(未定义)值。当声明多个变量时,应使用逗号运算符分隔。
12、赋值变量:使用等号=运算符可以为变量赋值,等号左侧为变量,右侧为被赋的值。
(JavaScript 引擎的解析方式是:先解析代码,获取所有被声明的变量,然后再一行一行地运行。 这样,所有声明的变量都会被提升到代码的头部,这就叫作变量提升(Hoisting)。)
13、变量作用域:JavaScript 变量可以分为全局变量和局部变量:
1) 全局变量:变量在整个页面脚本中都是可见的,可以被自由访问。
2) 局部变量:变量仅能在声明的函数内部可见,函数外是不允许访问的。
应尽量减少全局变量的使用,避免冲突发生,可以在脚本中创建一个全局变量,作为当前应用的唯一接口,然后通过对象直接量的形式包含所有应用程序变量。
也可以使用函数体封装应用程序,这是最常用的一种方法。
14、变量类型:JavaScript 是弱类型语言,对于变量类型的规范比较松散。具体表现如下:
1) 声明变量时,不要求指定类型。
2) 使用过程不严格,可以根据需要自动转换变量类型。
(变量的转换和类型检查没有一套统一、规范的方法,导致开发效率低下)
1、延迟执行:<script> 标签有一个布尔型属性 defer,设置该属性能够将 JavaScript 文件延迟到页面解析完毕后再运行。
2、异步执行:现在可以为 <script> 标签设置 async 属性,让浏览器异步加载 JavaScript 文件,即在加载 JavaScript 文件时,浏览器不会暂停,而是继续解析。这样能节省时间,提升响应速度。
(1、2说明:defer 属性适用于外部 JavaScript 文件,不适用于 <script>签包含的 JavaScript 脚本。因为saync属性是Html5的新增属性,异步执行,所以可以根据习惯继续把很多大型 JavaScript 库文件放在 <head> 标签内)
3、顺序执行:浏览器在解析 HTML 文档时,如果遇到第一个 <script> 标签,则 JavaScript 解释器会等到这个代码块的代码都加载完后,再对代码块进行预编译,然后执行。执行完毕,将继续解析后面的 HTML 代码,同时 JavaScript 解释器也准备好处理下一个代码块。
4、字符编码:JavaScript 遵循 Unicode 字符编码规则。Unicode 字符集中每个字符使用 2 个字节来表示,这意味着用户可以使用中文来命名 JavaScript 变量。
(Unicode 是 Latin-1 字符集的超集,编码数目达到百万级;Latin-1是 ASCII 字符集的扩展,包含 256 个拉丁字母; ASCII 字符集包含 128 个基本字符,即常用英文字母和符号。)
5、词法句法:词法定义了 JavaScript的基本名词规范,包括字符编码、命名规则、标识符、关键字、注释规则、 运算符和分隔符等。句法定义了 JavaScript的基本运算逻辑和程序结构,包括短语、句子和代码段的基本规则,如表达式、语句和程序结构等。(JavaScript 严格区分大小写)
6、直接量:直接量(Literal)就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表达式、对象直接量、数组直接量、函数直接量等。
//空字符串直接量
1 //数值直接量
true //布尔值直接量
/a/g //正则表达式直接量
null //特殊值直接量
{} //空对象直接量
[] //空数组直接量
function(){} //空函数直接量,也就是函数表达式
7、转义字符:由于各种原因,很多字符无法直接在代码中输入或输出,只能通过转义序列间接表示。
(Unicode 转义序列方法:\u + 4位十六进制数字。Latin-1 转义序列方法:\x + 2位十六进制数字)
序列 代表字符
\0 Null字符(\u0000)
\b 退格符(\u0008)
\t 水平制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\" 双引号(\u0022)
\' 撇号或单引号(\u0027)
\\ 反斜杠(\u005C)
\xXX 由 2 位十六进制数值 XX 指定的 Latin-1 字符
\uXXXX 由 4 位十六进制数值 XXXX 指定的 Unicode 字符
\XXX 由 1~3 位八进制数值(000 到 377)指定的 Latin-1 字符,可表示 256个 字符。如 \251 表示版本符号。注意,ECMAScript 3.0 不支持,考虑到兼容性不建议使用。
8、标识符规则:合法的标识符应该注意以下强制规则:
1) 第一个字符必须是字母、下划线(_)或美元符号($)。
2) 除了第一个字符外,其他位置可以使用 Unicode 字符。一般建议仅使用 ASCII 编码的字母,不建议使用双字节的字符。
3) 不能与 JavaScript 关键字、保留字重名。
4) 可以使用 Unicode 转义序列。例如,字符 a 可以使用“\u0061”表示。
9、关键字、保留字、全局变量和函数:关键字具有特定的用途,保留字目前还没有具体的用途,是为 JavaScript 升级版本预留备用的。用户也应该避免使用它们。
ECMAScript 关键字
break delete if this while
case do in throw with
catch else instanceof try
continue finally new typeof
debugger(ECMAScript 5 新增) for return var
default function switch void
ECMAScript 保留字
abstract double goto native static
boolean enum implements package super
byte export import private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile
JavaScript 预定义全局变量和函数
arguments encodeURL Infinity Number RegExp
Array encodeURLComponent isFinite Object String
Boolean Error isNaN parseFloat SyntaxError
Date eval JSON parseInt TypeError
decodeURL EvalError Math RangeError undefined
decodeURLComponent Function NaN ReferenceError URLError
10、注释:单行注释://单行注释信息。多行注释:/*多行注释信息*/。
11、声明变量:在 JavaScript 中,声明变量使用 var 语句。在一个 var 语句中,可以声明一个或多个变量,也可以为变量赋值,未赋值的变量初始化为 undefined(未定义)值。当声明多个变量时,应使用逗号运算符分隔。
12、赋值变量:使用等号=运算符可以为变量赋值,等号左侧为变量,右侧为被赋的值。
(JavaScript 引擎的解析方式是:先解析代码,获取所有被声明的变量,然后再一行一行地运行。 这样,所有声明的变量都会被提升到代码的头部,这就叫作变量提升(Hoisting)。)
13、变量作用域:JavaScript 变量可以分为全局变量和局部变量:
1) 全局变量:变量在整个页面脚本中都是可见的,可以被自由访问。
2) 局部变量:变量仅能在声明的函数内部可见,函数外是不允许访问的。
应尽量减少全局变量的使用,避免冲突发生,可以在脚本中创建一个全局变量,作为当前应用的唯一接口,然后通过对象直接量的形式包含所有应用程序变量。
也可以使用函数体封装应用程序,这是最常用的一种方法。
14、变量类型:JavaScript 是弱类型语言,对于变量类型的规范比较松散。具体表现如下:
1) 声明变量时,不要求指定类型。
2) 使用过程不严格,可以根据需要自动转换变量类型。
(变量的转换和类型检查没有一套统一、规范的方法,导致开发效率低下)