JavaScript高级程序设计(一)

53 阅读4分钟

JavaScript简介

JavaScript是一门用来与网页交互的语言,有三个部分组成:

  • ECMAScript:由ECMA-262定义并提供核心功能;
  • DOM(文档对象模型):提供与 网页内容 交互的方法和接口;
  • BOM(浏览器对象模型):提供与 浏览器 交互的方法和接口。

JavaScript的历史

1995年,JavaScript问世。主要用途是替代 Perl等服务器端语言处理输入验证;

在此之前,要验证某个必填字段,或者某个输入值是否有效,需要与服务器进行一次往返通信。

从那之后,JavaScript成为所有主流浏览器的标配。

如今,JavaScript不再局限于数据验证,而是渗透到 浏览器窗口 以及 内容 的方方面面,能够实现复杂的计算与交互,包括闭包、匿名函数等。成为了一门强大的编程语言。

JavaScript的实现

ECMAScript

ECMAScript即 ECMA-262定义的语言,并不局限于web浏览器,这门语言没有输入和输出之类的方法。

这门语言定义了如下部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

ECMAScript只是对实现这个规范描述的所有方面的一门语言的称呼。

DOM

DOM将整个页面抽象为一组分层的节点,HTML或者 XML页面的每个组成部分都是一种节点,包含不同的数据。

DOM 通过创建表示文档的树,让开发者可以随意控制网页的结构和内容。使用 DOM API,可以轻松对节点进行 增加、删除、修改 和 替换。

BOM

使用 BOM,可以操控浏览器显示页面之外的部分,HTML5以正式规范的形式涵盖了尽可能多的BOM特性。

总体来说,BOM主要针对浏览器的窗口和子窗口。不过,通常会把特定于浏览器的扩展都归在BOM的范畴,如:

  • 弹出新浏览器窗口的能力;

  • 移动、缩放和关闭浏览器窗口的能力;

  • navigator对象,提供关于浏览器的详尽信息;

  • location对象,提供关于浏览器加载页面的详尽信息;

  • screen对象,提供用户屏幕分辨率的详尽信息;

  • performance对象,提供浏览器内存占用、导航行为和时间统计的详尽信息;

  • 对cookie的支持;

  • 其他自定义对象,如 XMLHttpRequest 和 IE的ActiveXObject

HTML中的JavaScript

将JavaScript插入到 HTML 中的主要方法是使用 <script> 标签元素,此元素有 8 个属性:

  1. async 属性

立即异步加载脚本,不阻止其他页面动作,如不阻塞主线程解析HTML结构。

脚本加载完就执行。

  1. defer 属性

脚本会立即下载,脚本被延迟到 HTML文档完全解析和显示后再执行

  1. src 属性

外部文件、加载资源的路径

  1. crossorigin 属性

  2. integrity 属性

  3. charset 属性

  4. language 属性 (已废弃)

  5. type 属性

代替 language 属性,表示代码块中脚本语言的内容类型(也称 MIME类型)。

如果 type 值是 module,则代码会被当成 es6模块,只有这时代码中才能使用 import 和 export 关键字

在HTML中有两种方式使用 script 元素:

  • 直接嵌入
<script>
  function sayHi() {
    console.log("hello javascript!");
  }
</script>

默认情况下,script元素会阻塞页面的解析和渲染。在script元素中的代码被计算完成之前,页面的其余内容不会被加载和显示。
  • src 属性引入外部文件
<script src="example.js"></script>

扩展名.js不是必须的,但是服务器根据文件扩展名,来确定响应的正确MIME类型,如果不打算使用.js扩展名,一定要确保服务器能返回正确的MIME类型;

使用 src 属性的script元素不应该再在标签内包含其他javascript代码,浏览器只会下载和执行外部脚本文件,忽略行内代码。

script 元素可以来自外部域 的javascript 文件,可以进行jsonp跨域处理:

<script src="http://www.somewhere.com/afile.js"></script>

浏览器在解析这个资源时,会向src指定的路径发起 GET请求,以获取相应资源,这个初始请求不受浏览器同源策略的限制,但返回并执行的JavaScript受限制。

需要注意的是,这个外部资源可能会被恶意替换或者注入恶意代码,所以在包含外部域的javascrip文件时,要确保该域是自己所有的或值得信赖的,integrity 属性就是防范这种问题的武器,但这个属性不是所有浏览器都支持。