JavaScript基础使用

JavaScript简介

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

组成部分:
ECMAScript:描述了该语言的语法和基本对象。
文档对象模型(DOM):描述处理网页内容的方法和接口。
浏览器对象模型(BOM):描述与浏览器进行交互的方法和接口。

ECMAScript

入门程序

三种输出显示方式:
1、alert();弹窗输出显示
2、document.write();页面输出显示
3、console.log();控制台输出显示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>javascrit入门</title>
	</head>
	<body>
        <script type="text/javascript">
            //alert("hello world");//弹出窗口显示
            document.write("hello world");//页面中显示
            console.log("hello world");//控制台显示
        </script>
     </body>
</html>  

JavaScript中的注释有两种:

单行注释//
多行注释/* ... */
JavaScript的三种使用方式

第一种方式:在script标签中,script可以放在网页中任何位置。

<script type="text/javascript">
  	var num=10;
	var d=new Date();
	document.write(num);
</script>

第二种方式:使用外部JavaScript文件,把js代码放入单独的文件中 ,这个文件的扩展名.js,原则上放body底部,流式加载失败不会影响网页展示样式,让页面样式先加载提高页面打开速度。

<script type="text/javascript" src="js/myjs.js"></script>

第三种方式: 放在标签中的事件属性中,常见事件 ,onclick,一般用于简单的事件

<input type="button" value="我点我点我点" onclick="alert('好痛啊!')" />
变量声明

在JavaScript中,任何变量都用var关键字来声明,var是variable的缩写。

var num; //声明变量
num=10;//赋值

var s="zhangsan";//声明的同时赋值

var是声明关键字,语句以分号结尾,分号可以省略。

这里值得注意的是,JavaScript中的关键字,不可以作为变量名。就像在Java中你不可以写"int int=1;"一样。

JavaScript的关键字和保留字:

abstract、else、instanceof、super、boolean、enum、int、switch、break、export、interface、synchronized、byte、extends、let、this、case、false、long、throw、catch、final、native、throws、char、finally、new、transient、class、float、null、true、const、for、package、try、continue、function、private、typeof、debugger、goto、protected、var、default、if、public、void、delete、implements、return、volatile、do、import、short、while、double、in、static、with。

数据类型
基本数据类型

变量的基本类型有number、string、boolean、undefined、null五种。

定义数字Number类型

var a=1;

定义字符串string类型

var a="字符串";

定义布尔boolean类型

var a=false;

undefined类型:当一个变量未被初始化的时候,它的值为undefined

var a;

在Java中,当一个变量未被初始化的时候,Java中是null或者基本数据类型的默认值。

null类型:当一个引用不存在时,它为Null

引用(对象)类型

Object ,数组,自定义对象,function

创建引用类型对象:

    //创建对象
    var person = new Object();
    //动态添加类型
    person.name="jack";
    person.show = function(){
        document.write(this.name);
    }
    person.show();//jack
    document.write("<br />");
    var num = new Number(100);
    document.write(num);//100
    document.write("<br />");
    document.write(typeof(num));//object
    document.write("<br />");
    document.write(num instanceof Number);//true
    document.write("<br />");
创建自定义对象
function student(){
        this.stuNo;
        this.stuName;
        this.show=function(){
            document.write(this.stuNo+"----"+this.stuName);
        }
    }
    var stu = new student();
    stu.stuNo="001";
    stu.stuName="bom";
    stu.show();//001----bom

自定义对象json写法:

    var stu2 = {id:'002',name:'binry',age:20};
    document.write(stu2.id+"----"+stu2.name+"----"+stu2.age);//002----binry----20
数组类型

js中的数组长度是动态不固定的,预先可设定长度,也可不设定长度
数组先定义再赋值

var cities=new Array(3);
cities[0]="jack";
cities[1]="bin";
cities[2]="booy";

数组直接定义赋值

var a=[1,2,3,4];
运算符
算术运算符

+、-、*、/、%、++、–

var a=1;
var b=2;
a+b;//相加
a-b;//相减
a*b;//相乘
a/b;//相除
a%b;//求余

a++;//自增
b--;//自减
//上述规则和Java一样。
赋值运算符

=、+=、-=、/=、*=、%=

var a=10;
var b=20;
a=b;//赋值
a+=b;//相加后赋值
a-=b;//相减后赋值
a/=b;//相除后赋值
a*=b;//相乘后赋值
a%=b;//求余后赋值
逻辑运算符

与、或、非

&&、||、!

对于真假的boolean值可以进行三种逻辑命题的运算。

var a=false;
var b=true;
//非的逻辑
//!a->true;
//!b->false;
//与的逻辑
//a&&a->false;
//a&&b->false;
//b&&a->false;
//b&&b->true;
//或的逻辑
//a||a->false;
//a||b->true;
//b||a->true;
//b||b->true;
关系运算符

==相等

<小于

<=小于或等于

>大于

>=大于或等于

!=不等于

===全相等

var a=1;
var b=2;
//a==a->true
//a==b->false
//a<b->false
//a<=b->false
//a>b->true
//a>=b->true
//a!=b->true
//a===b->false
//这里三个等于“===”和两个等于“==”区别:
//前者相当于比较两个引用,后者相当于比较两个值。
//当比较两个值得时候,不考虑数据类型。
//也就是说1=="1"是true的。
字符串连接运算符

  +

三目运算符

?:

分支结构

if-else

if(true){    
}else{
}

1 if(条件表达式) 关系运算符 逻辑运算符
2 if(变量) 直接写变量,不用运算符,如果变量值为undefined,null 表示false,否则true
3 如果变量没有定义,则出现异常。

switch

switch(定值){
  case 1:
    break;
  case n:
    break;
  default:
     ;
}

循环结构

for循环

var a=0;
for(var i=0;i<=10;i++){
    a+=i;
}

while循环

var a=0;
var i=1;
while(i<=10){
   a+=i;
   i++;
}

do…while循环

var a=0;
var i=1;
do{
    a+=i;
  	i++;
}while(i<=10);

break与continue

可以使用break结束循环,用continue来结束本次循环。

增强for循环
注意: i不是arr中的元素,而是下标

for(var i in arr){
}
函数和事件
函数

包含一段功能的代码。目的:重复使用

函数定义
function关键字来声明,后面是函数名字,参数列表里不写var。整个方法不写返回值类型。

function functionName(parameters){
    //执行的代码
}

匿名函数

var method1=function(){
document.write("这是一个匿名函数");
}
method1();

自执行匿名函数

(function(s){
document.write("这是一个自执行匿名函数"+s);
})("hahaha");

全局变量和局部变量

函数内部声明的变量是局部变量,所以只能在函数内部访问它。
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它
闭包 (Closure)

闭包就是能够读取其他函数内部局部变量的函数; 闭包可以理解成“定义在一个函数内部的函数“。

闭包三个条件:
1、闭包是一个内部函数
2、闭包能够读取其他(外部)函数的局部变量
3、闭包和局部变量在同一个作用域。

使用形式:
1、闭包作为函数的返回值;
2、闭包作为函数的参数。

闭包好处:
1、使局部变量常驻内存,
2、避免污染全局变量
3、提高封装性保护局部变量

系统函数

提示框 alert();

alert("HelloWord");

alert方法没有返回值,也就是说如果用一个变量去接受返回值,将会得到undefined。无论你点击“确定”还是右上角的那个“X“关闭。

确认框 confirm();
这是一个你可以点击确定或者取消的弹窗

confirm("HelloWord");

confirm方法与alert不同,他的返回值是boolean,当你点击“确定”时,返回true,无论你点击“取消”还是右上角的那个“X“关闭,都返回false。

输入框 prompt()

这是一个你可以输入文本内容的弹窗

prompt("helloworld","hello");

第一个参数是提示信息,第二个参数是用户输入的默认值。

其他系统函数

parseInt(); 字符串转换整数
parseFloat(); 字符串转成小数
isNaN(); 判断数字是不是不是一个数字。

事件
事件 描述
onchange HTML 元素内容改变(离开光标触发)
onclick 用户点击 HTML 元素
onmouseover 光标移动到HTML元素
onmouseout 光标离开HTML元素
onkeydown 用户按下键盘按键
onload 浏览器已完成页面的加载
onsubmit 提交表单时执行的事件
正则表达式

正则表达式 Regular Expression ,是描述字符模式的对象。
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

语法:

var patt=new RegExp(pattern,modifiers);

或者更简单的方式:

var patt=/pattern/modifiers;

如:

var re1 = new RegExp("^1[3589]\\d{9}$");
var re2 = /^1[3589]\d{9}$/;

修饰符

修饰符用于执行区分大小写和全局匹配:

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

方括号

方括号用于查找某个范围内的字符:

表达式 描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
(red|blue|green) 查找任何指定的选项。

元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符 描述
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。[a-zA-Z0-9_]
\W 查找非单词字符。
\d 查找数字。[0-9]
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。

量词

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中所有的 “a”。
n* 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“A bird warbled” 中的 “b”,但是不匹配 “A goat grunted”。
n? 匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 “angel” 中的 “el”,“angle” 中的 “le”。
n{X} 匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。
n{X,} X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。
n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。

RegExp 对象方法

方法 描述 FF IE
exec 检索字符串中指定的值。返回找到的值,并确定其位置。 1 4
test 检索字符串中指定的值。返回 true 或 false。 1 4

支持正则表达式的 String 对象的方法

方法 描述 FF IE
match 找到一个或多个正则表达式的匹配。 1 4
replace 替换与正则表达式匹配的子串。 1 4
split 把字符串分割为字符串数组。 1 4

正则表达式的使用

test()方法:

test()方法搜索字符串指定的值,根据结果并返回真或假。

var patt1=new RegExp("^1[3589]\\d{9}$");
document.write(patt1.test("13688889999"));//true

exec() 方法:

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

var reg=/java/ig;
var str="hello java,java是最好的编程语言,我爱Java";
var s=null;
while(s=reg.exec(str)){
  document.write(s);
  document.write("<br/>")
}

字符串match()方法

var reg=/java/ig;
var str="hello java,java是最后的语言,我爱Java";
var arr=str.match(reg);
for(var i=0;i<arr.length;i++){
	document.write(arr[i]+"<br/>");
}

字符串replace()方法

var reg=/java/ig;
var str="hello java,java是最后的语言,我爱Java";
var str2=str.replace(reg,"JAVA");
document.write(str2+"<br/>");

字符串split()方法

var str="hello world,java best language";
var arr=str.split(/[ ,]/);
for(var i=0;i<arr.length;i++){
document.write(arr[i]+"<br/>");
}
			

DOM

DOM概述

通过 HTML DOM,使用 JavaScript访问 HTML 文档的所有元素。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

HTML DOM 模型被构造为对象的树:
在这里插入图片描述
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • JavaScript 能够改变页面中的所有 HTML 元素。
  • JavaScript 能够改变页面中的所有 HTML 属性。
  • JavaScript 能够改变页面中的所有 CSS 样式。
  • JavaScript 能够对页面中的所有事件做出反应。
获取HTML元素

通常,通过 JavaScript三种方法获取HTML元素进行操作。通过id找到的是对象,可以直接修改操作,通过class和标签名找到的是集合对象,需要遍历修改
方法一:id找到HTML元素
在 DOM 中查找 HTML 元素的最简单的方法,是通过使用元素的 id。
示例:

var x=document.getElementById("intro");

如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素。
如果未找到该元素,则 x 将包含 null。

方法二:标签名找到 HTML 元素

var y=x.getElementsByTagName("p");

方法三:类名找到HTML 元素

var x=document.getElementsByClassName("intro");

修改HTML
HTML DOM 允许 JavaScript 改变 HTML 元素的内容。
修改 HTML 内容的最简单的方法时使用 innerHTML 属性。

如需改变 HTML 元素的内容,请使用这个语法:

document.getElementById(id).innerHTML="abcd";
document.getElementById(id).innerText="xxxx";
改变HTML属性

改变 HTML 元素的属性值:

document.getElementById(id).attribute=新属性值

修改CSS样式

修改 HTML 元素的样式:

document.getElementById(id).style.property=新样式

创建新元素
添加新元素,必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素。
创建元素并追加内容

var para=document.createElement("p");
var node=document.createTextNode("这是一个新段落。");
para.appendChild(node);
//找到id并添加进去
var element=document.getElementById("div1");
element.appendChild(para);

删除已有的 HTML 元素

var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
DOM事件

HTML DOM 允许我们通过触发事件来执行代码。

比如以下事件:

  • 元素被点击。

  • 页面加载完成。

  • 输入框被修改。

示例:当用户点击按钮时,改变文字颜色为红色

<h1 id="id1">myH1</h1>
<button type="button" 
onclick="document.getElementById('id1').style.color='red'">
button</button>

示例:当用户点击按钮时,改变文字内容

<h1 onclick="this.innerHTML='改变内容!'">点击文本!</h1>

通过从事件处理器调用一个函数实现点击事件

<script>
function changetext(id)
{
    id.innerHTML="改变内容!";
}
</script>
<h1 onclick="changetext(this)">点击文本!</h1>

使用 JavaScript 来向 HTML 元素分配事件:

<script>
document.getElementById("myBtn").onclick=function(){
    document.getElementById("myhead2").style.color='blue';
};
</script>

onloadonunload 事件会在用户进入或离开页面时被触发。

onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。

<body onload="alert('页面加载完毕')">

onchange 事件常结合对输入字段的验证来使用。

下面是一个如何使用 onchange 的例子。当用户改变输入字段的内容时,会调用 upperCase() 函数。

<input type="text" id="fname" onchange="upperCase()">

onmouseoveronmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数。

<div onmouseover="mOver(this)" onmouseout="mOut(this)">Mouse Over Me</div>
<script>
function mOver(obj){
	obj.innerHTML="Thank You"
}
function mOut(obj){
	obj.innerHTML="Mouse Over Me"
}
</script>
EventListener

addEventListener() 方法

在用户点击按钮时触发监听事件:

document.getElementById("myBtn").addEventListener("click", displayDate);

addEventListener() 方法用于向指定元素添加事件句柄。添加的事件句柄不会覆盖已存在的事件句柄。可以向一个元素添加多个事件句柄。

使用 removeEventListener() 方法来移除事件的监听。

语法:

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 (如 “click” 或 “mousedown”). 把on去掉

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

注意:不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。

当用户点击元素时弹出 “Hello World!” :

element.addEventListener("click", myFunction);
function myFunction() {
    alert ("Hello World!");
}

addEventListener() 方法允许向同个元素添加多个事件,且不会覆盖已存在的事件:

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);
事件冒泡或事件捕获

事件传递有两种方式:冒泡与捕获

事件传递定义了元素事件触发的顺序。 如果你将 p元素插入到 div 元素中,用户点击 p 元素, 哪个元素的 “click” 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: p 元素的点击事件先触发,然后会触发 div元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: div元素的点击事件先触发 ,然后再触发 p 元素的点击事件。

addEventListener() 方法可以指定 “useCapture” 参数来设置传递类型:

addEventListener(event, function, useCapture);

默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

document.getElementById("myDiv").addEventListener("click", myFunction, true);

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction);

BOM

浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。
浏览器对象模型 (BOM):(Browser Object Model)尚无正式标准。
由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是 BOM 的方法和属性。

window

所有浏览器都支持 window 对象。它表示浏览器窗口。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。
全局函数是 window 对象的方法。

甚至 HTML DOM 的 document 也是 window 对象的属性之一:

window.document.getElementById("header");

与此相同:

document.getElementById("header");
window尺寸

有三种方法能够确定浏览器窗口的尺寸。

对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

  • window.innerHeight - 浏览器窗口的内部高度(不包括滚动条、菜单栏、工具栏)
  • window.innerWidth - 浏览器窗口的内部宽度(不包括滚动条、菜单栏、工具栏)

对于 Internet Explorer 8、7、6、5:

  • document.documentElement.clientHeight
  • document.documentElement.clientWidth

或者

  • document.body.clientHeight
  • document.body.clientWidth

实用的 JavaScript 方案(涵盖所有浏览器):

var w=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
var h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
window方法
  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
screen

可用宽度:screen.availWidth 属性返回访问者屏幕的宽度(像素),减去界面特性,比如窗口任务栏。

document.write("可用宽度: " + screen.availWidth);

可用高度:screen.availHeight 属性返回访问者屏幕的高度

document.write("可用高度: " + screen.availHeight);
location

window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

- location.href 属性返回当前页面的 URL- location.hostname 返回 web 主机的域名
- location.pathname 返回当前页面的路径和文件名
- location.port 返回 web 主机的端口 (80443- location.protocol 返回所使用的 web 协议(http:// 或 https://

location.assign() 方法加载新的文档。

<script>
function newDoc()
  {
  window.location.assign("http://www.baidu.com/")
  }
</script>
<input type="button" value="Load new document" onclick="newDoc()">
history

window.history 对象包含浏览器的历史
history.back() 与在浏览器点击后退按钮相同

<script>
function goBack()
  {
  window.history.back()
  }
</script>
<input type="button" value="Back" onclick="goBack()">

history.forward() 与在浏览器中点击按钮向前相同

<script>
function goForward()
  {
  window.history.forward()
  }
</script>
<input type="button" value="Forward" onclick="goForward()">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章