前言:这个系列不是这本书的一个系统性教程,只是我自己看下来的一种非完全性的学习。
JavaScript高级程序设计(第3版)非扫描版 PDF:
链接:https://pan.baidu.com/s/1TkSaAFoHRNy6p6JQj8jy6Q
提取码:0cq7
第2章——在HTML中使用javaScipt
2.1<script>元素
√HTML4.01为<script>属性提供了6个属性:
①async:可选。异步脚本。表示应该立即下载脚本,但不应妨碍页面中其它操作,支队外部脚本文件有效。
②charset:可选。通过sec属性指定的代码的字符集。
③defer:可选。延迟脚本。表示脚本可以延迟到文档完全被解析和显示之后再执行。
④language:已废弃。
⑤src:可选。表示包含要执行代码的外部文件。
⑥type:可选。可以看成是language属性,表示编写代码使用的脚本语言的内容类型。
√在<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码被下载、解析和执行完成之后,才开始呈现页面的内容。这会出现页面延迟,所以一般将JavaScript放在</body>之前。
2.2嵌入代码与外部文件
采用外部文件的好处:可维护性,可缓存,适应未来。
2.4<noscript>元素
√当浏览器不支持JavaScript时创造一个<noscript>元素,用以显示替代内容。
·浏览器不支持脚本。
·浏览器支持脚本,但脚本被禁用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example</title>
<script type="text/javascript" defer="defer" src="Example1.js">
</script>
<script type="text/javascript" defer="defer" src="Example2.js">
</script>
</head>
<body>
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript</p>
</noscript>
</body>
</html>
第3章——基本概念
3.1语法
√ECMAScript5引入了严格模式(strict mode)的概念。在严格模式下ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
√要在整个脚本中启用严格模式,可以在顶部添加如下代码:
“use strict”;
√在函数内部上方包含这条编译指示(pragma),也可以指定函数在严格模式下执行:
function doSomething() {
"use strict";
//函数体
}
3.2关键字和保留字
关键字
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger | function | this | with |
defalut | if | throw |
|
delete | in | try |
|
保留字
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
|
3.3变量
function test() {
message = 'hi'; //全局变量
}
test();
alert(message);
√(不推荐做法)省略了var操作符,因而message变成了全局变量。这样,主要调用过一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。
3.4数据类型
√5种基本数据类型:Undefined、Null、Boolean、Number、String
√1种复杂数据类型:Object
√有3个函数可以把非数值转换成数值:Number()、parsent()、parseFloat()
var num1 = parseInt('1234blue'); //1234
var num2 = parseInt(" "); //isNaN
var num3 = parseInt("0xA"); //10(十六进制数)
var num4 = parseInt("22.5"); //22
var num5 = parseInt("070"); //56(八进制数)
var num6 = parseInt("70"); //70
var num7 = parseInt("0xf"); //15(十六进制数)
var num8 = parseInt("AF",16);//175(十六进制数)
√parseFloat只解析十进制
3.6语句
for-in语句
√for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。
function Test() {
var txt = ['banana', 'apple', 'strawberry', 'pear'];
var x;
var text = '';
for (x in txt) {
text += txt[x];
}
document.write(text);
}
label语句
√书本中讲的不多,我推荐一篇博客吧:
https://blog.csdn.net/creabine/article/details/62228145
break与continue语句
√这两个语句我们都是很熟悉的,我这边主要是结合label语句来学习。
①break
function Test() {
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0)
break;
num++;
}
document.write(num);
}
这里,当i递增到5的时候,for循环了4次,所以num=4
②continue
function Test() {
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0)
continue;
num++;
}
document.write(num);
}
这里,当i递增到5的时候,for循环了4次,跳过这个循环,继续下一个循环,直到i=10,又运行了4次,所以最后num=8
③break与label
function Test() {
var num = 0;
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5)
break;
num++;
}
}
document.write(num);
}
本来要运行100次,但是加了break,中间当i=5,j=5的时候,中止了内部循环,下一个循环从i=6,j=0开始,也就是少了5次循环,所以最后num=95。
加上label标签
function Test() {
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5)
break outermost;
num++;
}
}
document.write(num);
}
这时候运行到55的时候,break直接终止了两个循环,所以最后num=55。
④continue与label
function Test() {
var num = 0;
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5)
continue;
num++;
}
}
document.write(num);
}
只跳过了一次循环,所以最后num=99。
function Test() {
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5)
continue outermost;
num++;
}
}
document.write(num);
}
跳过了一个大循环,所以最后num=95。
with语句
√with语句的作用是将代码的作用域设置到一个特定的对象中。
√定义with语句的目的主要是为了简化多次编写同一个对象的工作。
var qs = location.search.substring(1);
var hostName = location.hostname;
var ur1 = location.href;
with(location) {
var qs = search.substring(1);
var hostName = hostname;
var ur1 = href;
}
3.7函数
√由于不存在函数签名的特性,ECMAScript函数不能重载。