JavaScript基础概念

  记录一下自己学习《JavaScript高级程序设计(3rd)》的一些笔记。

第1章 JavaScript简介

  JavaScript诞生于1995年。JavaScript从一个简单的输入验证器发展成为一门强大的编程语言,完全出乎人们的意料。它既是一门非常简单的语言,又是一门非常复杂的语言。想要全面理解和掌握JavaScript,关键在于弄清楚它的本质、历史和局限性。

1.1 JavaScript的实现

  虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多。一个完整的JavaScript实现应该由下列三个不同的部分组成:
image

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

第2章 在HTML中使用JavaScript

2.1 <script>元素

  在HTML页面中插入JavaScript的主要方法,就是使用<script>元素。HTML4.01为<script>定义了下列6个属性:

  • async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作。只对外部脚本文件有效。
  • charest:可选。表示通过src属性指定的代码的字符集。很少用。
  • defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。
  • language:已废弃。
  • src:可选。表示包含要执行代码的外部文件。
  • type:可选。默认为type/javascript。

2.1.1 标签的位置

  • 传统做法:
    所有<script>元素都放在页面的<head>元素中。
  • 现代Web应用做法:
    把全部的JavaScript引用放在<body>元素中页面内容的后面。

2.1.2 延迟脚本

  HTML4.01为<script>标签定义了defer属性。在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。

2.1.3 异步脚本

  HTML5为<script>元素定义了async属性。与defer类似告诉浏览器立即下载文件。但是与defer不同的是,标记为async的脚本并不保证按照指定它们的先后顺序执行。

第3章 基本概念

3.1 语法

  ECMAScript的语法大量借鉴了C及其他类C语言的语法。

3.1.1 区分大小写

  ECMAScript中的一切变量、函数名和操作符都区分大小写。

3.1.2 标识符

  标识符即变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一个或多个字符:

  • 第一个字符必须是一个字母、下划线或一个美元符号;
  • 其他字符可以试字母、下划线、美元符号或数字。

  一般来说,标识符采用驼峰大小写格式,即第一个字母小写,剩下的每个单词的首字母大写。

3.1.3 注释

  ECMAScript使用C风格的注释,包括单行注释和多行注释。
// 单行注释
/*多


释*/

3.1.4 严格模式

  ECMAScript 5 引入了严格模式的概念。严格模式为JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

  • 在整个脚本中启用文本模式,在顶部添加:
    "use strict";

  • 制定函数在严格模式下执行,在函数内部上方添加:

1
2
3
4
function doSomething () {
"use strict";
//函数体
}

3.1.5 语句

  ECMAScript中语句以一个分号结尾,如果省略封号,则由解析器确定语句的结尾。
Tips:任何时候都不要省略结尾分号和单语句使用代码块可以减少错误。

3.2 关键字和保留字

ECMAScript全部关键字:

1
2
3
4
break		case		catch		continue	debugger	default		delete
do else finally for function if in
instanceof new return switch this throw try
typeof var void while with

ECMA-262第3版定义的全部保留字:

1
2
3
4
5
abstract	boolean		byte		char		class		const		debugger
double enum export extends final float goto
implements import int interface long native package
private protected public short static super synchronized
throws transient volatile

第5版在非严格模式下运行时的保留字缩减为:

1
class		enum		extends		super		const		export		import

在严格模式下,第5版还对一下保留字施加了限制:

1
2
3
implements	package		public
interface private static
let protected yield

3.3 变量

  ECMAScript的变量是松散类型的,即可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量使用var:var message;
  初始化赋值与C类似,不使用var,则为全局变量。在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误。

3.4 数据类型

  ECMAScript的数据类型有:undefined、null、boolean、number、string和object。前5种又称为基本数据类型。ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述6种类型之一。

3.5 操作符

  • 一元操作符:递增++、递减–、一元加+、一元减-
  • 位操作符:按位非~、按位与&、按位或|、按位异或^、左移<<、有符号右移>>、无符号右移>>>
  • 布尔操作符:逻辑非!、逻辑与&&、逻辑或||
  • 乘性操作符:乘法*、除法/、求模%
  • 加性操作符:加法+、减法-
  • 关系操作符:小于<、大于>、小于等于<=、大于等于>=
  • 相等操作符:等于==、不等于!=、全等===、不全等!==
  • 条件操作符:?(例:boolean_expression ? true_value : false_value)
  • 赋值操作符:=
  • 逗号操作符:,

3.6 语句

  • if 语句
  • do-while 语句
  • while 语句
  • for 语句
  • for-in 语句
  • label 语句
  • break 和 continue 语句
  • with 语句
  • switch 语句

3.7 函数

  ECMAScript中函数使用function关键字来声明,后跟一组参数以及函数体:

1
2
3
function functionName (arg0, arg1, ..., argN) {
statements
}

  严格模式下对函数的限制:

  • 不能把函数和参数命名为eval和arguments
  • 不能出现两个命名参数同名的情况

  ECMAScript函数的参数与大多数语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,因为参数在内部是用一个数组来表示的,在函数体内部可以通过arguments对象来访问这个数组,从而获取传递给函数的每一个参数。例如:

1
2
3
function sayHi () {
alert("Hello " + arguments[0] + "," + arguments[1]);
}

  ECMAScript函数不能像传统意义上那样实现重载,如果在ECMASript中定义了两个名字相同的函数,则后定义的才有作用。可以通过检查函数传入参数的类型和数量并作出不同的反应来模仿方法的重载。

打赏点猫粮钱吧~