第一章
- java script是一种专门为网页交互而设计的脚本语言
- ECMAScript 提供外围语言性能
- 文档对象模型DOM 提供拜访和操作网页内容的办法和接口
- 浏览器对象模型,提供与浏览器交互的办法和接口
第二章
2.1 <script>
向HTML页面插入JavaScript的次要办法就是是用<script>元素
- async
- charset
- defer
- language
- src
- type : 示意编写代码应用的脚本语言的内容类型(也称为MIME类型)
- 间接在页面中嵌入JavaScript
- 蕴含内部JavaScript
在解释器对<script>元素外部的所有代码求值结束以前,页面中的其余内容都不会被浏览器加载或显示
带有 src 属性的<script>元素不应该在其<script>和</script>标签之间再 蕴含额定的 JavaScript 代码。如果蕴含了嵌入的代码,则只会下载并执行内部脚本文件,嵌入的代码 会被疏忽。
通过<script>元素的 src 属性还能够蕴含来自内部域的 JavaScript 文件。这一点既让 <script>元素倍显弱小,又让它备受争议。在这一点上,<script>与<img>元素十分类似,即它的 src 属性能够是指向以后 HTML 页面所在域之外的某个域中的残缺 URL,例如:
<script type="text/javascript" src="http://www.somewhere.com/afile.js"></script>
2.1.1 标签的地位
所有<script>元素都应该放在页面的<head>元素中
在文档的<head>元素中蕴含所有 JavaScript 文件,意味着必须等到全副 JavaScript 代码都被下载、 解析和执行实现当前,能力开始出现页面的内容(浏览器在遇到<body>标签时才开始出现内容)。
2.1.2 提早脚本
- defer
这个属性的用处是表明脚本在执行时不会影响页 面的结构。也就是说,脚本会被提早到整个页面都解析结束后再运行。
defer 属性只实用于内部脚本文件
2.1.3 异步脚本
- async
标记为 async 的脚本并不保障依照指定它们的先后顺序执行
2.1.4 在XHTML中的用法
可扩大超文本标记语言,即 XHTML(Extensible HyperText Markup Language),是将 HTML 作为 XML 的利用而从新定义的一个规范。编写 XHTML 代码的规定要比编写 HTML 严格得多,而且间接影 响是否在嵌入 JavaScript 代码时应用<script/>标签。
防止在XHTML中呈现语法错误
- 一是用相应的 HTML 实体(<)替换代码中所有的小于号(<),替换后的代码相似如下所示
- 保障让雷同代码在 XHTML 中失常运行的第二个办法,就是用一个 CData 片段来蕴含 JavaScript 代 码。
第三章 基本概念
3.1 辨别大小写
3.1.4 严格模式
“use strict”
严格模式是为 JavaScript 定义了一种不同的 解析与执行模型。在严格模式下,ECMAScript 3 中的一些不确定的行为将失去解决,而且对某些不平安 的操作也会抛出谬误。
3.1.5 语句
ECMAScript 中的语句以一个分号结尾;
3.2 关键字和保留字
break
case
catch
continue
debugger*
default
delete
do instanceof
else new
finally return
for switch
function this
if throw
in try
typeof
var
void
while
with
3.3 变量
ECMAScript 的变量是涣散类型的,所谓涣散类型就是能够用来保留任何类型的数据。换句话说, 每个变量仅仅是一个用于保留值的占位符而已。定义变量时要应用 var 操作符(留神 var 是一个要害 字),后跟变量名(即一个标识符),如下所示:
var message;
有一点必须留神,即用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说, 如果在函数中应用 var 定义一个变量,那么这个变量在函数退出后就会被销毁
尽管省略 var 操作符能够定义全局变量,但这也不是咱们举荐的做法。因为在局 部作用域中定义的全局变量很难保护,而且如果无意地疏忽了 var 操作符,也会因为 相应变量不会马上就有定义而导致不必要的凌乱。给未经申明的变量赋值在严格模式 下会导致抛出 ReferenceError 谬误。
3.4 数据类型
- undefined
- null
- boolean
- number
- string
- object
3.4.1 typeof操作符
3.4.2 undefines 类型
在应用 var 申明变量但未对其加以初始化时,这个变量的值就是undefined
3.4.3 null类型
如果定义的变量筹备在未来用于保留对象,那么最好将该变量初始化为 null 而不是其余值
实际上,undefined 值是派生自 null 值的,因而 ECMA-262 规定对它们的相等性测试要返回 true:
alert(null == undefined); //true
3.4.3 Boolean
3.4.5 Number
用 e 表示法 示意的数值等于 e 后面的数值乘以 10 的指数次幂。ECMAScript 中 e 表示法的格局也是如此,即后面是 一个数值(能够是整数也能够是浮点数),两头是一个大写或小写的字母 E,前面是 10 的幂中的指数, 该幂值将用来与后面的数相乘。上面是一个应用 e 表示法示意数值的例子:
var floatNum = 3.125e7; // 等于31250000
ECMAScript 可能示意的最小数值保 存在 Number.MIN_VALUE 中——在大多数浏览器中,这个值是 5e-324;可能示意的最大数值保留在 Number.MAX_VALUE 中
任何波及 NaN 的操作(例如 NaN/10)都会返回 NaN,这 个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包含 NaN 自身。
为了打消在应用 parseInt()函数时可能导致的上述困惑,能够为这个函数提供第二个参数:转换 时应用的基数(即多少进制)。
- parseInt
- parseFloat
3.4.6 String类型
String 类型用于示意由零或多个 16 位 Unicode 字符组成的字符序列,即字符串
3.4.7 Object类型
ECMAScript 中的对象其实就是一组数据和性能的汇合。对象能够通过执行 new 操作符后跟要创立 的对象类型的名称来创立。而创立 Object 类型的实例并为其增加属性和(或)办法,就能够创立自定 义对象,如下所示:
- constructor:保留着用于创立以后对象的函数
- hasOwnProperty(propertyName): 用于查看给定的属性在以后对象实例中是否存在
- isPrototypeOf(Object) 用于查看传图对象是否是以后对象的原型
- propertyIsEnumerable(propertyName)用于查看给定的属性是否可能for-in
因为在 ECMAScript 中 Object 是所有对象的根底,因而所有对象都具备这些根本的属性和办法。
3.5 操作符
相等和不相等——先转换再比拟,全等和不全等——仅比拟而不转换。
ECMAScript 中的相等操作符由两个等于号(==)示意。
除了在比拟之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。
3.6 语句
3.6.5 for-in 语句
for(property in expression) statement
for(var propertyName in window){
document.write(propertyName);
}
ECMAScript 对象的属性没有程序。因而,通过 for-in 循环输入的属性名的程序是不可预测的
3.6.6 label语句
应用 label 语句能够在代码中增加标签,以便未来应用。以下是 label 语句的语法
3.6.8 with
with 语句的作用是将代码的作用域设置到一个特定的对象中。with 语句的语法如下
with (expression) statement;
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
在这个重写后的例子中,应用 with 语句关联了 location 对象。这意味着在 with 语句的代码块 外部,每个变量首先被认为是一个局部变量,而如果在部分环境中找不到该变量的定义,就会查问 location 对象中是否有同名的属性。如果发现了同名属性,则以 location 对象属性的值作为变量的值。
3.7 函数
ECMAScript 中的函数应用 function 关键字来申明,后跟一组参数以及函数体。
3.7.1 了解参数
ECMAScript函数的参数与大多数其余语言中函数的参数有所不同。ECMAScript函数不介意传递进 来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即使你定义的函数只接管两个参数, 在调用这个函数时也未必肯定要传递两个参数。
起因是 ECMAScript 中的参数在外部是用一个数组来示意的。函数接管 到的始终都是这个数组,而不关怀数组中蕴含哪些参数(如果有参数的话)。如果这个数组中不蕴含任 何元素,无所谓;如果蕴含多个元素,也没有问题。实际上,在函数体内能够通过 arguments 对象来 拜访这个参数数组,从而获取传递给函数的每一个参数
arguments 对象只是与数组相似(它并不是 Array 的实例),因为能够应用方括号语法访 问它的每一个元素(即第一个元素是 arguments[0],第二个元素是 arguments[1],以此类推)
命名的参数只提供便当,但不是必须的。另 外,在命名参数方面,其余语言可能须要当时创立一个函数签名,而未来的调用必须与该签名统一。但 在 ECMAScript 中,没有这些条条框框,解析器不会验证命名参数。
通过拜访 arguments 对象的 length 属性能够获知有多少个参数传递给了函数。
明明参数只是为了提供便当
对于 arguments 的行为,还有一点比拟有意思。那就是它的值永远与对应命名参数的值放弃同步
function doAdd(num1, num2) {
arguments[1] = 10;
alert(arguments[0] + num2);
}
每次执行, 会讲第二个参数批改为10, 因为arguments对象中的值会主动反映到对应的命名参数,所以批改arguments[1],也就批改了num2
他并不是说读取这两个值会拜访雷同的内存空间,他们的内存空间是独立的,然而他们的值会同步
没有传递值的命名参数将主动被赋予 undefined 值
ECMAScript 中的所有参数传递的都是值,不可能通过援用传递参数
3.7.2 没有重载
ECMAScript 函数不能像传统意义上那样实现重载。而在其余语言(如 Java)中,能够为一个函数 编写两个定义,只有这两个定义的签名(承受的参数的类型和数量)不同即可。
如果在 ECMAScript 中定义了两个名字雷同的函数,则该名字只属于后定义的函数。
发表回复