一,什么是JavaScript

1,与Java无关!与Java无关!与Java无关!

JavaScript是一种为网站添加互动以及自定义行为的客户端脚本语言, 通常只能通过Web浏览器去完成操作, 而无法像普通意义上的程序那样独立运行。
JavaScript是一种轻量级、解释型的 Web 开发语言,该语言系统不是很庞杂,简单易学。由于所有现代浏览器都己嵌入了JavaScript引擎、JavaScript 源代码可以在浏览器中直接被解释执行,用户不用担心支持问题。

JavaScript的引入,符合”渐进增强“概念中的分层设计,能赋予网站页面更灵活的交互能力。可先对HTML、CSS与JavaScript在使用时的相互联系进行简单了解:web前端基础概述:基于一个简单的网页示例

2,怎样在网页中使用JavaScript

1,使用<script>标签,直接把JavaScript源代码直接放到网页文档中:

<!DOCTYPE html>
<html>
<head><title>JavaScript基础</title><script>function resp() {document.getElementById("demo").innerHTML = "The World: Welcome,JavaScript!";}</script>
</head>
<body><script>document.write("<hl>JavaScript: Hello,World!</hl>");</script><p id="demo">回复她一下:</p><button type="button" onclick="resp()">发送回复</button>
</body>
</html>

对于页面内的JavaScript脚本来说,各种公共函数和变量应放在<head>和</head>标签之间,而将页面加载期间执行的代码、DOM对象初始化以及与DOM相关的全局引用赋值操作放在<body>和</body>标签之间,如果没有特殊要求,不妨放在</body>标签前面 。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
//公用函数
function hello(user) {return "<h1>Hello," + user + "</h1>";
}
</script>
</head>
<script>
//全局变量象初始化
var user = "World";
</script>
<body>
<script>
//程序执行代码
document.write(hello(user));
</script>
</body>
</html>

2,使用 JavaScript 文件:
还是使用<script>标签。

<!DOCTYPE html>
<html>
<head><title>JavaScript基础</title><script type="text/javascript" src="../static/js/test.js"></script>
</head>
<body><p id="demo">回复她一下:</p><button type="button" onclick="resp()">发送回复</button>
</body>
</html>test.js:
function resp(){document.getElementById("demo").innerHTML = "The World: Welcome,JavaScript!";
}

实现一样的效果。

用<script>标签引入JavaScript文件,通过该标签的 src 属性指定 JavaScript 文件的URL(统一资源定位符)。

二,JavaScript基础

1,语法基础

1,大小写敏感:

<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>d = new Date();              // 获取当前日期和时间
alert(d.toString());            // 显示日期//骆驼命名法就是在名称中每一个逻辑断点都有一个大写字母来标记,例如:
printEmployeePaychecks();
//如果使用下画线命名法,则可以按如下方式输入:
print_employee_paychecks();
//帕斯卡命名法与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写。例如,下面就是帕斯卡命名法定义的变量。
PrintEmployeePaychecks();</script>
</head>
<body>
</body>
</html>

2,代码注释:
单行使用//,多行/**/

3,关键字和保留字:

  • reak、else、new、var、case、finally、return、void、catch、for、switch、while、continue、function、this、with、default、if、throw、delete、in、try、do、instranceof、typeof。
  • 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。

2,常量和变量

1,常量:
JavaScript 不允许用户自定义常量,只提供了一些常用的数学常量。
关于“自定义JavaScript常量”的话题,可以参考这篇文章
2,声明与定义变量:

  • var a;
  • var e = 2, f = 3;
  • var e = f = 3;

关于变量的作用域,可以参考C语言的情况。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>var a = "a(域外) = 全局变量<br />";var b = "b(域外) = 全局变量<br />";function f() {var a = "a(域内) = 域内变量<br />";b = "b(域内) = 域内变量<br />";document.write(a);document.write(b);    }f();document.write(a);document.write(b);
</script>
</head>
<body>
</body>
</html>

3,运算符

运算符参考

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>var a = 1, b = 2;
var c = a + b;name = name ? name : "no value";         //通过三元运算符初始化变量的值
alert(name);var a = [];                            //声明并初始化变量a的值
for(var i = 0, j = 10; i <= 10; i ++ , j -- ){      //在循环体中使用逗号运算符实现额外计算任务a[i, j] = i + j ;document.writeln("a[" + i + "," + j + "]= " + a[i, j] + "<br/>");
}window.onload =function(){document.getElementById("info").innerHTML = window.location;}</script>
</head>
<body>
<form action="#123456?name=ok" method="get" name="form1" id="form1" ><input type="text" value="zhangsan" name="name" /><br><input type="password" value="123456" name="pass" /><br>
</form><a href="javascript:void(document.forms[0].submit())">提交当前表单</a> </body>
</html>

4,语句

1,if:

if (a > 0){a -= 6;if (b > 0)b = 0;else if(c > 0){c = a;a = 6;}else if(d > 0){d = a;b = a;}elseb = c;
}
else {a += 6;b = a;
}

2,switch:

var age = prompt("请输入年龄:",'')switch (age) {case 1:alert("一岁");break;case 2:alert("两岁");break;case 3:alert("瞎猜你三岁");break;default:alert("不知道你几岁");
}

3,while:

var a = 0;while (a < 10){document.write(a);a++;
}do{document.write(a);a--;
}while (a > 0);

4,for:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>*{margin:0;padding: 0;}span{display: inline-block;width: 60px;height: 16px;line-height: 16px;padding: 2px;margin: 5px;border: 1px solid red;text-align: center;}</style>
</head>
<body><div id="wrap"></div><script>window.onload = function (){var wrap = document.getElementById("wrap");var str = "";for (var i = 1; i <= 9; i++) { //使用局部变量var count = i;for (var j = 1; j <= count ; j++) {j === count ? str += "<span>" + j + "x" + count + "=" + j*count + "</span><br>": str += "<span>" + j + "x" + count + "=" + j*count + "</span>";}}wrap.innerHTML = str;}</script>
</body>
</html>

4,跳转语句 break、continue、return

5,异常处理:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
try{alert("执行程序");var err = new Error("异常");throw err;
}
catch(e){alert("错误名称:" + e.name + "\n错误信息:" + e.message);
}
finally{alert("finally");
}
</script>
</head>
<body>
</body>
</html>

6,var与function:

  • var 语句声明 一个或多个变量。
  • function 语句定义函数。

    7,with 语句和空语句:
    with 语句能够为一组语句创建缺省的对象。在这一组语句中,任何不指定对象的属性引用都将被认为是缺省对象的。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="box"></div>
<script>
document.getElementById("box").style.borderColor="red";
document.getElementById("box").style.borderWidth="1px";
document.getElementById("box").style.borderStyle="solid";
document.getElementById("box").style.width="400px";
document.getElementById("box").style.height="200px";
document.getElementById("box").innerHTML = "test";
等效:
with(document.getElementById("box").style){borderColor="red"; borderWidth="1px";borderStyle="solid";width="400px";height="200px";
}
</script>
</body>
</html>

5,数据类型

JavaScript 是一种弱类型语言,在定义变量时不需要指定类型。

  • 直接存储数据,称为值类型数据。
  • 存储数据的空间地址来间接保存数据,称为引用型数据。

1,数值:
JavaScript 包含 3 种基本数据类型:数值、字符串和布尔型。

  • JavaScript 数值不区分整型和浮点数,所有数值都为浮点型数值来表示。
  • JavaScript使用typeof()方法查看数据类型。
  • JavaScript提供严格模式用于消除Javascript语法的一些不合理、不严谨之处。
数值类型:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>
//【示例1】数值直接量可以细分为整型直接量和浮点型直接量。浮点数就是带有小数点的数值,而整数是不带小数点的数。
var int = 1;                   // 整型数值
var float = 1.0;               // 浮点型数值
//【示例2】浮点数可以使用科学计数法来表示。
var float = 1.2e3;
//等价于:
var float = 1.2*10*10*10;
//或:
var float = 1200;//【示例3】
var float = 1.2e-3;
//等价于:
var float = 0.0012;
//但不等于:
var float = 1.2*1/10*1/10*1/10;    // 返回0.0012000000000000001
//或:
var float = 1.2/10/10/10;          // 返回0.0012000000000000001//【示例4】十六进制数值直接量:以“0X”或“0x”作为前缀,后面跟随十六进制的数值直接量。
var num = 0x1F4;               // 十六进制数值
alert(num);                     // 返回500//【示例5】八进制数值直接量:以数字0为前缀,其后跟随一个八进制的数值直接量。
var num = 0764;                // 八进制数值//【示例6】JavaScript还提供了大量的数值运算函数,这它们都是静态函数,可以直接调用。
var a = Math.floor(20.5);              // 调用数学函数,下舍入
var b = Math.round(20.5);              // 调用数学函数,四舍五入
alert(a);                               // 返回20
alert(b);                               // 返回21//【示例7】toString()是一个非常实用的方法,它可以根据所传递的参数把数值转换为对应进制的数值字符串。参数可以接受2~36之间的任意整数,也就是说,该方法可以把数值转换为2~36之间任意一种进制数值字符串。
var a = 32;
document.writeln(a.toString(2));        // 返回字符串100000
document.writeln(a.toString(4));        // 返回字符串200
document.writeln(a.toString(16));       // 返回字符串20
document.writeln(a.toString(30));       // 返回字符串12
document.writeln(a.toString(32));       // 返回字符串10//【提示】
document.writeln(32.toString(16));  // 执行错误
document.writeln((32).toString(16));    // 返回20</script>
</head>
<body>
</body>
</html>
字符串类型:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>//【示例1】下面代码将返回“学而不思则罔思而不学则殆”合并后的字符串。
alert("学而不思则罔" + "思而不学则殆");
//【示例2】确定字符串的长度可以使用length属性,下面代码将返回13。
alert("学而不思则罔,思而不学则殆".length); // 返回13</script>
</head>
<body>
<script>
var str = "'JavaScript'不是'Java'";
var str = '<meta charset="utf-8">';
</script>
</body>
</html>
布尔类型:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>//【示例1】下面使用Boolean构造函数强制转换各种特殊值为布尔值。
alert(Boolean(0));              // 返回false
alert(Boolean(!!1));            // 先转为布尔值,再返回true
alert(Boolean(null));           // 返回false
alert(Boolean(""));           // 返回false
alert(Boolean(undefined));  // 返回false
//【示例2】下面代码利用假值的特殊性,判断变量a是否为空,如果为空,则提示错误信息。
var a;
if(!a){alert("该变量为空,还没有赋值!");
}
//【示例3】通过下面方式可以有效是否初始化,检测变量b,并根据情况补充赋值:
var b;
b = b?b:"OK";                // 如果变量b为空则重新为其赋值,否则采用原来的值
alert(b);</script>
</head>
<body>
</body>
</html>
typeof():
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>alert(typeof 1);              // 返回字符串"number"
alert(typeof "1");                // 返回字符串"string"
alert(typeof true);             // 返回字符串"boolean"
alert(typeof {});               // 返回字符串"object"
alert(typeof []);               // 返回字符串"object "
alert(typeof function(){}); // 返回字符串"function"
alert(typeof null);             // 返回字符串"object"
alert(typeof undefined);        // 返回字符串"undefined"</script>
</head>
<body>
</body>
</html>
严格模式:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script>//【示例2】将"use strict"放到函数内的第一行,则整个函数将以严格模式运行。function strict(){"use strict";return "这是严格模式。";}function notStrict(){return "这是正常模式。";} //【示例3】如果定义一个模块或者一个库,可以采用一个匿名函数自执行的方式进行设计:
(function (){ "use strict";//some code here
})();//以下都是无效的,将不会触发严格模式。
//"use strict"前有代码
var width = 10;
'use strict';
globalVar = 100 ;
//"use strict"前有空语句
;
'use strict';
globalVar = 100;
//或
function func() {;'use strict';localVar = 200;
}
//或
function func() {;'use strict'localVar = 200;
} //当然,"use strict"前加注释是可以的:
//strict mode
'use strict';
globalVar = 100;
//或
function func() {// strict mode'use strict';localVar = 200;
}
</script>
</head>
<body>
基本数值类型转换:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>
//数值转为字符串:
var a = 100;
var b = a + "";
alert(typeof b);    //返回string
var a = 1 + 1 + "a";
alert(a);                           // 返回字符串"2a"//字符串转为数值:
var a = "3.14";
var b = parseInt(a);
alert(typeof b);    //返回number
var c = parseFloat(a);
alert(typeof c);    //返回number
var d = a * 1;
alert(typeof d);    //返回number
var e = "a" + 1 + 1 ;
alert(e);                           // 返回字符串"a11"//数值转为布尔:
var a = 233;
var b = !!a;
alert(typeof b);    //返回boolean//布尔转为字符串:
var bool = false;
var a = bool + "";
alert(a);    //返回"false"</script>
</head>
<body>
</body>
</html>

2,null 与 undefined:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>
//数值转为字符串:
var a = null;
alert("a="+a + " " + "typeof a is "+typeof a); //a=null   typeof a is object
var b;
alert("b="+b + "" + "typeof b is "+typeof b);  //b=undefined   typeof b is undefined
</script>
</head>
<body>
</body>
</html>

3,引用型数据:
后面会讲哦~

6,函数

JavaScript 是函数式编程语言,要熟悉 JavaScript 语言,就应该熟悉函数的应用。
1,有两种方式定义函数:

  1. 使用 function 语句声明函数 。

    命名函数的方法也被称为声明式函数,而匿名函数的方法也被称为引用式函数或者函数表达式,即把函数看做一个复杂的表达式,并把表达式赋予给变量。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body><div id="person"><script>var say = function(name, id){document.write('<h1>' +  name + ' : ' + id + '</h1>');}say("张三", "9527");</script></div><div id="infor"><script>function info(information){document.write('<h1>' +  information + '</h1>');}</script><button type="button" onclick="info('绝密,不可查看!')">点击查看张三信息</button></div>
</body>
</html>
  1. 通过 Function 对象来构造函数 。

    每个 arg 都是一个函数参数,最后一个参数是函数主体〈要执行的代码〉。 Function()的所有参数必须是字符串。
<script>
var say = new Function("name", "say", "document.write('<h1>' +  name + ' : ' + say + '</h1>');");
say("张三", "Hi!");
</script>

2,调用函数:

<script>
function f(){return "Hello,World!";
}
document.write(f());
</script>

3,函数参数:

  • 形参就是在定义函数时,传递给函数的参数,被称为形参,即形式上参数。
  • 实参就是当函数被调用时,传给函数的参数,这些参数被称为实参。
<script>
function add(a, b) {if (add.length !== arguments.length) //length获取形参个数,arguments对象可以快速操纵函数的实参。使用 ar胆ments . length 可以获取函数实参的个数,使用数组下标(缸guments[n] )可以获取实际传递给函数的每个参数值。throw new Error("实参与形参不一致,请重新调用函数!");elsereturn a + b;
}
try{alert(add(2));
}
catch(e){alert(e.message);
}
</script>


4,函数应用:
在实际开发中函数常被当作表达式来进行处理。

  1. 匿名函数
<script>
var z = function(x, y) {return (x + y) / 2;
}(23, 35);
alert(z);
</script>
  1. 函数作为值
<script>
var a = function(x,y) {return (x+y)/2;
}
alert( a(12,33) );//函数既然可以当作值来使用,因此也可以参与到表达式运算中。
(function(x) {alert(x);
})(50);
</script>
  1. 函数作为参数
<script>
var a = function (f, x, y) {return f(x, y);
};
var b = function(x, y) {return x + y;
};
alert( a(b, 3, 4) );
</script>

5,闭包函数:
闭包是能够读取其他函数内部变量的函数,在JavaScript中,只有函数内部的子函数才能读取该函数的局部变量,所以闭包是将函数内部和函数外部连接起来的桥梁,闭包函数就是外部函数被调用后,它的变量不会消失,仍然被内部函数所使用,而且所有的内部函数都拥有对外部函数的访问权限。

<script>
function a() {var n = 0;function b(m){n = n + m;return n;}return b;
}
var c = a();            //调用外层函数,n=0,返回内部函数b
document.write(typeof c); //function
document.write("<br>");
document.write(c(3));   //内部函数b保存了n=0,向内部函数b传入3后,3=0+3,返回3
document.write("<br>");
document.write(c(4));   //内部函数b保存了n=3,向内部函数b传入4后,7=3+4,返回7
document.write("<br>");
document.write(c(5));   //内部函数b保存了n=7,向内部函数b传入5后,12=7+5,返回12
</script>

7,对象

1,创建对象:
对象是由 new 运算符生成,生成对象的函数被称为类。生成的对象被称为类的实例,简称为对象。这里不再深入讲OOP的概念了。

直接实例化已有的类:
var today = new Date();定义对象直接量:
var point = { x:2.3, y:-1.2
};

2,访问对象:
通过点号运算符 . 来访问对象的属性。

var today = new Date();
var hourNow = today.getHours();var point = { x:2.3, y:-1.2
};
var x = point.x;

对象的属性值可以是简单的值,也可以是复杂的值,如函数、对象。

<script>
var point = {f : function(){return this.y; //this就相当于Java中的this、python中的self},x : {a : 1,b : 2},y : -1.2
};
var pf = point.f();
alert(pf);
var pa = point.x.a; //等价于var a =point["x"]["a"];
alert(pa);
</script>

8, 数组

1,定义数组:
通过构造函数 Array()和运算符 new 实现。

<script>//定义空数组
var a = new Array();//定义带有多种数据类型元素的数组
var a = new Array(1,2,3,"4","5"); //数组的元素没有类型限制,同python中的list//定义指定长度的数组
var a = new Array(6); //没有为元素初始化赋值,这时它们的初始值都是undefined。数组长度是可变的!
alert(a.length) //通过数组的 length 属性确定数组的长度。//以省略new运算符,直接使用Array()函数来
var a = new Array(6);
var a = Array(6);//定义数组直接量
var a = [1,2,3,"4","5"];
</script>

2,存取元素:
使用日运算符可以存取数组元素的值。

<script>
//使用for遍历数组
var str = "";
var a = [1, 2, 3, 4, 5];
for(var i = 0 ; i < a.length; i ++ ){str += (-a[i]) + " ";
}
document.write(a + "<br>");
document.write(str + "<br>");var a = [1, 2, 3, 4, 5];
a.length = 4;
document.write(a + "<br>");//尾插尾删
a.push(1,2,3);
document.write(a + "<br>");
a.push(4,5);
document.write(a + "<br>");
a.pop();
document.write(a + "<br>");//头插头删
a.unshift(0);
document.write(a + "<br>");
a.unshift(-2, -1);
document.write(a + "<br>");
a.shift();
document.write(a + "<br>");//获取从指定位置开始的指定个数的元素
var a = [1,2,3,4,5,6];
var b = a.splice(2,2);
document.write(a + "<br />");
document.write(b + "<br />"); //3,4
//用新元素替换从指定位置开始的指定个数的元素
var a = [1,2,3,4,5,6];
var b = a.splice(2,2,7,8,9);
document.write(a + "<br />"); //1,2,7,8,9,5,6
document.write(b + "<br />"); //3,4
</script>

三,操作BOM

BOM(Browser Object Model)即浏览器对象模型,主要用于管理浏览器窗口。 它提供了大量独立的、可以与浏览器窗口进行互动的功能, 这些功能虽然与任何网页内容无关,但作用域交互层,为交互式网页提供了条件。
BOM由多个对象组成,包括window对象、location对象、navigator对象、history对象等。

1,使用 window 对象

window 对象是 BOM 的核心,代表浏览器窗口的一个实例。它作为JavaScript中的全局对象,是JavaScript访问浏览器窗口的接口。
1,访问浏览器窗口:
过 window 对象可以访问浏览器窗口,同时与浏览器相关的其他客户端对象都是 window 的子对象,通过 window 属性进行引用 。

其中:

  • window:客户端 JavaScript 中的顶层对象 。每当<body>或<frameset>标签出现时,window 对象就会被自动创建。
  • navigator : 包含客户端有关浏览器的信息。
  • screen : 包含客户端显示屏的信息 。
  • history : 包含浏览器窗口访问过的 URL 信息 。
  • location :包含当前网页文挡的 URL 信息。
  • document : 包含整个 HTML 文档,可被用来访问文档内容,及其所有页面元素 。

2,全局作用域:
window 对象提供了全局作用域,所有的全局变量都被视为该对象的属性。

var a = "window.a";
function f(){alert(a);
}
alert(window.a); //引用 window 对象的属性 a,返回字符串 ”window.a ”
window.f(); //调用 windwo 对象的方法 f (),返回字符串” window.a ”

3,使用系统测试方法:
window 对象定义了 3 个人机交互的接口方法,方便开发人员对 JavaScript 脚本进行测试:

  • alert() :简单的提示对话框,由浏览器向用户弹出提示性信息。该方法包含一个可选的提示信息参数。 这个在前面用到很多次了。
  • confinn() :简单的提示对话框,由浏览器向用户弹出提示性信息,对话框中包含两个按钮,分别表示“确定”和“取消”。也包含一个可选的提示信息参数,
  • prompt():弹出提示对话框,可以接收用户输入的信息,并把用户输入的信息返回。包含一个可选的提示信息参数。
var user = prompt("请输入你的用户名:");
if( ! ! user){  var ok = confirm("你输入的用户名为:\n" + user + "\n请确认。");if(ok){alert("欢迎你:\n" + user );}else{ user = prompt("请重新输入你的用户名:");alert("欢迎你:\n" + user );}
}
else {user = prompt("请输入你的用户名:");
}


通过 HTML 方式在客户端输出一段 HTML 片段,然后使用 css 修饰对话框的显示样式,借助 JavaScript 来设计对话框的行为和交互效果。

<style type="text/css">
#alert_box { position: absolute; left: 50%; top: 50%; width: 400px; height: 200px; display:none;}
#alert_box dl { position: absolute; left: -200px; top: -100px; width: 400px; height: 200px; border: solid 1px #999; border-radius: 8px; overflow: hidden; }
#alert_box dt { background-color: #ccc; height: 30px; text-align: center; line-height: 30px; font-weight: bold; font-size: 15px; }
#alert_box dd { padding: 6px; margin: 0; font-size: 12px; }
</style>window.alert =  function(title, info){var box = document.getElementById("alert_box");var html = '<dl><dt>' + title + '</dt><dd>' + info + '</dd><\/dl>';if( box ){box.innerHTML = html;box.style.display = "block";}else {var div = document.createElement("div");div.id = "alert_box";div.style.display = "block";document.body.appendChild(div);div.innerHTML = html;}
}
alert("重写alert()方法", "这仅是一个设计思路,还可以进一步设计");

4,打开和关闭窗口:
打开窗口:window. open(URL, narne,features,replace);

  • URL :可选字符 串, 声 明在新窗 口中显示文档的 URL 。
  • name:可选字符 串, 声 明新窗口的名称。
  • features :可选字符串, 声 明了 新窗 口要显示的标准浏览器的特征。
  • replace:可选的布尔值, 规定了装载到窗口的 URL 是否在窗口浏览历史中创建一个新条目。
  • 新创建的 window 对象拥有一个 opener 属性,它保存着打开它的原始窗口对象。
myWindow=window.open();
myWindow.document.write("<h1>这是新打开的窗口</h1>");
myWindow.focus();
myWindow.opener.document.write("<h1>这是原来窗口</h1>");
alert( myWindow.opener == window);窗口并不跟踪己打开的弹出窗口,因此必要时只能手动实现跟踪 。
有些浏览器(如 Chrome)会在独立的进程中运行每个标签页。当一个标签页打开另一个标签页时,如果两个 window 对象之间需要通信,那么新标签页就不能运行在独立的进程中 。

2,关闭窗口:window . close;

  • 使用 window.closed 属性可以检测当前窗口是否关闭。
  • 关闭一个新创建的 w 窗口:w.close;
var error = false;
try {var url = "http://news.baidu.com/";var features = "height=500, width=800, top=100, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no";var w = window.open (url, "newW", features);if (w == null){error = true;}setTimeout(function(){if(w.closed){alert("创建的窗口已经关闭。")}else{w.close();}},3000);
}
catch (ex){error = true;
}if (error){alert("浏览器禁止弹出窗口。");
}

5,使用框架集:
在HTML文档中,如果页面包含框架,则每个框架都拥有自己的 window 对象,并且保存在 frames集合中,可以通过frames数值索引从左至右、从上到下访问每个 window 对象,或者使用框架名称访问每个 window 对象。每个 window 对象都有一个 name 属性,其中包含框架的名称 。

6,控制窗口位置:
使用 window 对象的 screenLeft 和 screenTop 属性可以读取或设置窗口的位置。

<script type="text/javascript">var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;alert("Left: " + leftPos);alert("Top: " + topPos);
</script>

使用 window 对象的 moveToO和 moveByO方法可以将窗口精确地移动到一个新位置。

<script type="text/javascript">
//将窗口移动到屏幕左上角
window.moveTo(0,0);
//将窗口向下移动100像素
window.moveBy(0, 100);
//将窗口移动到(200,300)新位置
window.moveTo(200, 300);
//将窗口向左移动50像素
window.moveBy(-50, 0);
</script>

7,控制窗口大小:
使用 window 对象的 innerWidth、 innerHeight、 outerWidth 和 outerHeight 这 4 个属性可以确定窗口大小 。

<script type="text/javascript">var pageWidth = window.innerWidth,pageHeight = window.innerHeight;if (typeof pageWidth != "number"){if (document.compatMode == "CSS1Compat"){pageWidth = document.documentElement.clientWidth;pageHeight = document.documentElement.clientHeight;} else {pageWidth = document.body.clientWidth;pageHeight = document.body.clientHeight;}}alert("Width: " + pageWidth);alert("Height: " + pageHeight);
</script>

window 对象定义了 resizeByO和 resizeToO方法,它们可以按照相对数量和绝对数量调整窗口的大小。

<script type="text/javascript">
window.onload = function(){timer = window.setInterval("jump()", 1000);
}
function jump(){window.resizeTo(200, 200)x = Math.ceil(Math.random() * 1024)y = Math.ceil(Math.random() * 760)window.moveTo(x, y)
}
</script>

8,使用定时器:
window 对象包含 4 个定时器专用方法,说明如表 16.3 所示,使用它们可以实现代码定时运行,避免连续执行,这样可以设计动画。

<script>
var o = document.getElementsByTagName("body")[0].childNodes; // 获取body元素下所有子元素
for(var i = 0; i < o.length; i ++ ){      // 遍历元素集合o[i].onmouseover = function(i){       // 注册鼠标经过事件处理函数return function(){                   // 返回闭包函数f(o[i]);       // 调用函数f,并传递当前对象引用}}(i);             // 调用函数并传递循环序号,实现在闭包中存储对象序号值
}
function f(o){          // 延迟处理函数// 定义延迟半秒钟后执行代码var out = setTimeout( function(){alert(o.tagName);                     // 显示当前元素的名称}, 1000);
}
</script>

2,使用 navigator 对象

navigator 对象包含了浏览器的基本信息,如名称、版本和系统等。通过window.navigator 可以引用该对象,并利用它的属性来读取客户端基本信息,

1,浏览器检测方法:
如果不关心浏览器的身份,仅仅在意浏览器的执行能力,那么使用特征检测法就完全可以满足需要。

if(document.getElementsByName){      // 如果存在,则使用该方法获取a元素var a = document.getElementsByName("a");
}
else if(document.getElementsByTagName){     // 如果存在,则使用该方法获取a元素var a = document.getElementsByTagName("a");
}

使用用户代理字符串检测浏览器类型。客户端浏览器每次发送 Hπp 请求时,都会附带有一个 user-agent 字符串,对于 Web 开发人员来说,可以通过脚本识别客户使用 的浏览器类型。

var s = window.navigator.userAgent;
alert(s); // 返回字符串"Mozilla /4.0 (compatible;MSIE 7.0;Windows NT 5.1;DigExt ; NET CLR 2. 0.50727 ) "var s = navigator.userAgent;

2,检测浏览器类型和版本号:
用户只需要根据不同浏览器类型匹配特殊信息即可 。

var ua = navigator.userAgent.toLowerCase();     // 获取用户端信息
var info ={ie : /msie/.test(ua) && !/opera/.test(ua),      // 匹配IE浏览器op : /opera/.test(ua),                            // 匹配Opera浏览器sa : /version.*safari/.test(ua),               // 匹配Safari浏览器ch : /chrome/.test(ua),                       // 匹配Chrome浏览器ff : /gecko/.test(ua) && !/webkit/.test(ua)   // 匹配Firefox浏览器
};(info.ie) && alert("IE浏览器");
(info.op) && alert("Opera浏览器");
(info.sa) && alert("Safari浏览器");
(info.ff) && alert("Firefox浏览器");
(info.ch) && alert("Chrome浏览器");function getIEVer(){var ua = navigator.userAgent;        // 获取用户端信息var b = ua.indexOf("MSIE ");       // 检测特殊字符串"MSIE "的位置if(b < 0){return 0;}return parseFloat(ua.substring(b + 5, ua.indexOf(";", b)));// 截取版本号字符串,并转换为数值
}alert(getIEVer());

3,检测客户操作系统:
在 navigator.userAgent 返回值中,一般都会包含操作系统的基本信息,不过这些信息比较散乱,没有统一的规则。一般情况下用户可以检测一些更为通用的信息。

<script type="text/javascript">
var isWin = (navigator.userAgent.indexOf("Win") != - 1);// 如果是Windows系统,则返回true
var isMac = (navigator.userAgent.indexOf("Mac") != - 1); // 如果是Macintosh系统,则返回true
var isUnix = (navigator.userAgent.indexOf("X11") != - 1); // 如果是UNIX系统,则返回true
var isLinux = (navigator.userAgent.indexOf("Linux") != - 1); // 如果是Linux系统,则返回true
</script>

4,检测插件:
对于非 E 浏览器,可以使用 navigator 对象的 plugins 属性实现。 plugins 是一个数组,该数组中的每一项都包含下列属性。

  • name:插件的名字。
  • description:插件的描述。
  • filename:插件的文件名。
  • length:插件所处理的 MIME 类型数量 。
<script>
function hasPlugin(name){name = name.toLowerCase();for (var i=0; i < navigator.plugins.length; i++){if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){return true;}}return false;
}
alert(hasPlugin("Flash"));
alert(hasPlugin("QuickTime"));
alert(hasPlugin("Java"));
</script>

在 E 中检测插件可以使用 ActiveXObject。

<script>
function hasIEPlugin(name){try {new ActiveXObject(name);return true;} catch (ex){return false;}
}
alert(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));
alert(hasIEPlugin("QuickTime.QuickTime"));
</script>

3,使用 location 对象

location 对象存储当前页面与位置( URL )相关 的信息, 表示当前显示文档 的 Web 地址 。使用 window对象的 location 属性可以访问 。
location 对象定义了 8 个属性:

<script>
/*http://www.mysite.cn:80/news/index.asp?id=123&name=location#top
*/
var queryString = function(){      // 获取URL查询字符串参数值的通用函数var q = location.search.substring(1); // 获取查询字符串,即“id=123&name= location”部分var a = q.split("&");          // 以&符号为界把查询字符串劈开为数组var o = {};                        // 定义一个临时对象for( var i = 0; i <a.length; i++){     // 遍历数组var n = a[i].indexOf("=");           // 获取每个参数中的等号小标位置if(n == -1) continue;    // 如果没有发现则跳到下一次循环继续操作var v1 = a[i].substring(0, n);        // 截取等号前的参数名称var v2 = a[i].substring(n+1);        // 截取等号后的参数值o[v1] = unescape(v2);              // 以名/值对的形式存储在对象中}return o;                                 // 返回对象
}
var f1 = queryString();                // 调用查询字符串函数
for(var i in f1){                       // 遍历返回对象,获取每个参数及其值alert(i + "=" + f1[i]);
}
</script>

4,使用 history 对象

histOIγ 对象存储浏览器窗 口的浏览历史,通过 window 对象 的 history 属性可 以访问该对象 。为 了保护客户端浏览信息的安全和隐私, history对象禁止 JavaScript 脚本直接操作这些访问信息。
History 对象允许使用 length 属性读取列表中 URL 的个数,并可以调用 backO 、 forwardQ和 goQ方法访问数组中的 URL。

5,使用 screen 对象

screen 对象存储客户端屏幕信息,这些信息可以用来探测客户端硬件的基本配置 。利用 sαeen 对象可以优化程序的设计,满足不 同用户 的显示要求。


<script>
function center(url){   // 窗口居中处理函数var w = screen.availWidth / 2;  //获取客户端屏幕的宽度一半var h = screen.availHeight/2;    // 获取客户端屏幕的高度一半var t = (screen.availHeight - h)/2;     // 计算居中显示时顶部坐标var l = (screen.availWidth - w)/2;   // 计算居中显示时左侧坐标var p = "top=" + t + ",left=" + l + ",width=" + w + ",height=" +h; // 设计坐标参数字符串var win = window.open(url,"url",p);     // 打开指定的窗口,并传递参数win.focus(); // 获取窗口焦点
}
center("https://www.baidu.com/"); // 调用该函数
</script>

6,使用 document 对象

在浏览器窗口中,每个 window 对象都会包含一个 document 属性,该属性引用窗口中显示 HTML 文档的 document 对象。 document 对象与它所包含的各种节点(如表单、图像和链接)构成了文档对象模型。


1,访问文档对象:
浏览器在加载文档时,会自动构建文档对象模型,把文档中同类元素对象映射到一个集合中,然后以 document 对象属性的形式允许用户访问。
这些集合都是 HTMLCollection 对象,为访问文档常用对象提供了快捷方式。

  • document.anchors :返回文档中所有 Archor对象,即所有带 name 特性的<a>标签。
  • document.applets :返回文档中所有 Applet 对象, 即所有<applet>标签,不再推荐使用。
  • document.forms :返回文档中所有 Form 对象,与document.getElementsByTagName('form")得到的结果相同.
  • document.images:返回文档中所有 Image 对象,与 document.getElementsByTagName("img”)得到的结果相同.
  • document.links:返回文档中所有 Area 和 Link 对象,即所有带 href 特性的<a>标签。

2,动态生成文档 内容:
使用 document 对象的 write()和 writeln()方法可以动态生成文档内容。包括以下两种方式:

  • 在浏览器解析时动态输出信息。
  • 在调用事件处理函数时使用 write()或 writeln()方法生成文档内容。
<script>
function f(){document.write('<p>调用事件处理函数时动态生成的内容</p>');
}
document.write('<p οnclick="f()">文档解析时动态生成的内容</p>');
</script>

JavaScript基础入门相关推荐

  1. JavaScript基础入门 封装DOM 连缀

    JavaScript基础入门 封装DOM 连缀 适合初学者 获取元素节点 获取ID 获取tagName 获取Name 设置 这个只能是设置CSS样式,添加html方法,添加click方法等. 封装的b ...

  2. 《2020版JavaScript基础入门教程全集》,助你一臂之力!

    当下,随着5G商用正在有序推进,很多传统的前端工程师并不能满足时下企业用人需求了,越来越多的开发模式以及前端框架不断的涌现出来,这也就要求程序员需要不断去自我增值. 前端要学习的东西很多,对于自学的小 ...

  3. JavaScript 基础入门

    JavaScript 基础入门 简介 一.JS 基础语法 1.JS 语法与变量 (1)JavaScript 的书写位置 (2)认识输入输出语句 (3)学会处理报错 (4)变量 (5)变量声明提升 2. ...

  4. 【Javascript 基础入门】

    目录 javascript基础入门 javascript的历史 JavaScript 与 ECMAScript 的关系 如何运行 JavaScript JavaScript 的特点 注释 单行注释 多 ...

  5. JavaScript基础入门-陈璇-专题视频课程

    JavaScript基础入门-397人已学习 课程介绍         本课包括ECMAScript.流程控制.函数.内置对象.JS调试.JS面试内容,从零带你逐步提升JS技能! 课程收益     了 ...

  6. javascript基础入门知识点整理

    学习目标:- 掌握编程的基本思维- 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔等看 ...

  7. javascript高级编程教程,javascript基础入门案例

    谁有比较好的javascript视频教程 李炎恢的javascript教程,在verycd上可以下载. 结合<javascript高级程序设计>学习,应该会比较好,他这个教程就是参考了&l ...

  8. 学习JavaScript基础入门(0基础JavaScript,)

    一.介绍JavaScript 1.编程语言 编程让计算机为解决某个问题而使用某种程序设计语言编写代码,并最终得到结果的过程 2.计算机基础 就是计算机所执行的一系列的指令集合,而程序全部都是我们所掌握 ...

  9. JavaScript基础入门教程

    目录 1.JavaScript介绍 什么是JavaScript? JavaScript的作用 JavaScript的组成 JavaScript的书写位置 JavaScript的输入输出语法 2.变量 ...

  10. JavaScript基础入门-----万字详解

    浏览器执行JS简介 浏览器分成两大部分 渲染引擎和JS 引擎 渲染引擎: 用来解析HTML与CSS,俗称内核,比如chrome浏览器的blink,老版本的webkit JS 引擎:也称为JS 解释器. ...

最新文章

  1. 12CSS中的盒子模型
  2. oracle linux 5.8安装oracle 11g rac环境之grid安装
  3. Boost:字符串正则表达式的测试程序
  4. poj 2390 Bank Interest(计算本利和)
  5. vscode 书签_10个我必备的 VS code 拓展
  6. java 上传 进度,关于 javaweb的文件上传实时显示进度
  7. (71)Verilog HDL时间度量系统函数:$time
  8. 23中设计模式之简单工厂模式
  9. 后台异常 - Content is not allowed in prolog
  10. Vbs脚本编程简明教程之十五
  11. 通过lsyncd 设置两个linux(centOS7)服务器之间的目录文件互相实时同步
  12. 夺命雷公狗ThinkPHP项目之----企业网站25之网站前台面包屑导航URL的完善
  13. Flutter高仿微信-第26篇-新的朋友
  14. c语言 乱码转化为16进制_编码格式介绍及C语言处理汉字编码
  15. 计算机磁盘扫描教程,win7系统下关闭“检查磁盘”和“扫描并修复”提示的方法...
  16. 只有mdf文件和ldf文件--怎么恢复数据库
  17. java离群值,R从数据框中按组别移除离群值
  18. MSF Risk Management Discipline
  19. 国内电子商务从业人员需要具备哪些知识?
  20. dataframe两个表合并_Spark DataFrame 不是真正的 DataFrame

热门文章

  1. 《Advanced .NET Debugging》 读书笔记 Listing 3-6: 使用sxe在程序载入mscorwks之后停下来载入sos...
  2. 如何创建控制台应用程序
  3. python 学习目录
  4. Java入门视频教程
  5. 一个小时,零基础入门,看完这篇30行代码 教你实现百度换肤!
  6. 不足40M的WPS极限精简版,便携性拉满,老电脑福音
  7. JMeter接口测试工具基础 — Badboy工具
  8. jQuery按住滑块拖动验证插件
  9. KVM虚拟化技术(理论理解以及虚拟化平台搭建步骤)
  10. JS实现PDF合并功能