JavaScript 的简介
什么是JavaScript: 是基于对象和事件驱动的语言,应用于客户端,也能依赖nodejs在服务器上运行。 基于对象: java是面向对象,使用对象需要创建; js里面提供好了一些对象,直接使用 事件驱动: 每次滑动鼠标,变换一张图片 客户端: 指的是浏览器
JavaScript的特点
第一个:动态性
第二个:安全性
JavaScript不能访问本地硬盘里面的文件
第三个:跨平台性
JavaScript跨平台,只要在系统里面安装了支持JavaScript的浏览器,可以运行JavaScript
Java和JavaScript区别
(雷锋和雷峰塔)
第一,java是sun公司,现在是oracle;JavaScript是网景公司
第二,java是面向对象的语言,javascript是基于对象的语言
第三,java跨平台需要依靠虚拟机实现,JavaScript只需要浏览器可以运行
第四,JavaScript弱类型语言,java是强类型的语言
比如在java里面定义一个变量 int a = 10; int b = "10";不正确
在JavaScript里面定义变量都是使用一个关键字 var a = 10; var b = "10"; var c = true;
第五,java运行先编译通过虚拟机运行,JavaScript直接使用浏览器运行
JavaScript由三部分组成
第一部分:ECMAScript
由ECMA组织制定语句,语法
第二部分:BOM
broswer object model:浏览器对象模型
第三部分:DOM
document object model :文档对象模型
js和html的结合方式
有两种结合方式
第一种:使用html中的标签 <script type="text/javascript"> js代码 </script>
代码
<script type="text/javascript">
alert("aaa");
</script>
第二种:使用html的标签,引入外部的js文件
<script type="text/javascript" src="js文件的路径"></script>
代码:
<script type="text/javascript" src="1.js">
//不要在script标签里面写js代码了,不会执行
alert("aaa");
</script>使用第二种方式的时候有两点注意
注意一:不要在script标签里面写js代码了,不会执行
注意二:结束script标签 </script>,不要在标签内结束
js的注释有两种 :
//单行注释
/*
多行注释
*/
变量声明和数据类型
(1)在js里面如何声明变量,都是使用一个关键字var var a = 10;
原始类型有五个:
string:字符串类型。( var a = "abc")
number:数字类型。( var b = 10)
boolean:布尔类型 true false。(var c = true)
null: null是特殊的引用类型,表示对象引用为空。比如 var date = null;
undefined :表示定义了一个变量,但是没有赋值。 值只有undefined
typeof 变量|值
(3)typeof(变量的名称): 查看当前变量的类型。 alert(typeof(a));
通过typeof可以判断一个值或者变量是否是原始类型,若是原始类型,还可以判断属于那种.
引用类型和类型转换
引用类型
Object 对象:所有对象都由这个对象继承而来
Boolean 对象:Boolean 原始类型的引用类型
Number 对象: Number 原始类型的引用类型
原始类型中的String Number Boolean都是伪对象,可以调用相应的方法
Js有几种弹出方式
警告框:
alert(“文本”)
确认框:
confirm(“文本”)
提示框:
prompt(“文本”,”默认值”)
数组
Array
* 什么是数组:定义一个变量只能存一个值,想要存多个值,可以使用数组进行存储
js里面定义数组的方式
第一个:var arr1 = [];
第二个:var arr2 = ["10",10,true]; //可以写任意的类型
第三种:var arr3 = new Array(3); //表示定义数组名称是arr3,数组的长度是3
第四种:var arr4 = new Array(4,5,6);//表示定义数组名称是arr4,数组里面的值4 5 6
注意:在js里面数组的长度可变的,数组的长度是最大的下标+1,之间如果没有赋值直接默认是空字符串
String:
语法:
new String(值|变量);//返回一个对象
String(值|变量);//返回原始类型
常用方法:
substring(start,end):[start,end)
substr(start,size):从索引为指定的值开始向后截取几个
charAt(index):返回在指定位置的字符。
indexOf(""):返回字符串所在索引
replace():替换
split():切割
常用属性:length
Boolean:
语法:
new Boolean(值|变量);
Boolean(值|变量);
非0数字 非空字符串 非空对象 转成true
Number
语法:
new Number(值|变量);
Number(值|变量);
注意:
null====>0 false====>0 true====>1 字符串的数字=====>对应的数字 其他的(比如字符,标点符号)NaN
Date:
new Date();
常用方法:
toLocalString()
RegExp:正则表达式
语法:
直接量语法 /正则表达式/参数
直接量语法 /正则表达式/
new RegExp("正则表达式")
new RegExp("正则表达式","参数")
参数:
i:忽略大小写
g:全局
常用方法:
test() :返回值为boolean
Math:
Math.常量|方法
Math.PI
Math.random() [0,1)
全局:★
decodeURI() 解码某个编码的 URI。
encodeURI() 把字符串编码为 URI。
Number():强制转换成数字
String():转成字符串
parseInt():尝试转换成整数
parseFloat():尝试转换成小数
eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
类型转换
** 转换成字符串
** 转换成数字:parseInt() 和 parseFloat()
** 强制类型转换
Boolean(value) - 把给定的值转换成 Boolean 型;
Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
String(value) - 把给定的值转换成字符串;
运算符
(1)算术运算符
+ - * /....
(2)赋值运算符
+=含义: x+=y 相当于 x=x+y
(3)比较运算符
==:表示条件的判断,如果是=,表示赋值
(4)逻辑运算符
&& || !
(5)js的运算符和java不同的内容
第一个:js里面不区分整数和小数* 比如 var a = 123/1000*1000,如果在java里面结果是 0, js里面的结果:123
第二个:字符串的相加和相减操作
*
字符串相加是字符串的拼接操作,字符串相减是真正的相减运算,如果字符串不是数字提示NaN
//字符串的相加和相减
var b = "10";
document.write(b+1); //字符串拼接
document.write("<hr/>");
document.write(b-1); //真正相减的运算
document.write("<hr/>");
var c = "a";
document.write(c-1); //NaN
第三个:boolean类型相加和相减的操作
如果布尔类型值是true,把类型当成1运算;如果布尔类型值是false,把类型当成0运算
//布尔类型相加和相减操作
var flag = true;
document.write(flag+1); // 2,当boolean类型是true时候,把类型当成1运算
document.write("<hr/>");
var flag1 = false;
document.write(flag1+1); //1,当boolean类型是false时候,把类型当成0运算
第四个:==和===区别
==比较的是值, === 比较的是值和类型
ECMAScript 对象
string对象
(1)字符串对象
创建字符串:var a = "abc"; var b = new String("bb");
(2)属性 length 字符串的长度
(3)方法
第一类:与html相关的方法(设置字符串的样式的方法)
= bold() 使用粗体显示字符串。
document.write(a.bold());
= fontcolor() 使用指定的颜色来显示字符串。
document.write(a.fontcolor("red"));
= fontsize() 使用指定的尺寸来显示字符串。
document.write(a.fontsize(7));
= link() 将字符串显示为链接
document.write(a.link("04-练习99乘法表.html"));
第二类:与java相似的方法(在java里面也有类似的方法)
= charAt() 返回在指定位置的字符。 如果位置不存在字符,返回空字符串""
var str = "abcdefg";
document.write(str.charAt(1));
= concat() 连接字符串
document.write(str.concat(str1));
= indexOf() 检索字符串,得到检索的字符的位置,如果没有找到返回-1
var str2 = "ABCD";
document.write(str2.indexOf("R"));
= split() 把字符串分割为字符串数组
var str3 = "a-b-c";
var arr = str3.split("-");
document.write("length: "+arr.length);
= substr() 从起始索引号提取字符串中指定数目的字符。
= substring() 提取字符串中两个指定的索引号之间的字符
var str4 = "MARYJACKLUCY";
document.write(str4.substr(2,3));
//RYJ, 第一个参数表示从哪个位置开始,第二个参数表示向后取几个位置的值
document.write("<br/>");
document.write(str4.substring(2,3));
//R ,第一个参数表示从哪个位置开始,第二个参数到哪个位置结束(不包含这个位置) [2,3)
Array对象
(1)创建数组
(2)属性
* length 设置或返回数组中元素的数目
** //length属性
var arr1 = new Array(4,5,6);
document.write(arr1.length);
(3)方法
concat():连接数组 数组1.concat(数组2);
join():把数组根据指定字符进行分割
** var arr3 = ["mary","jack","lucy"];
document.write(arr3.join("-"));
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加元素,并返回新的长度
reverse() 颠倒数组中元素的顺序
Math对象
(1)进行数学运算,在Math对象里面的方法,直接使用Math.方法名称进行调用
(2)方法
ceil(x) 对一个数进行向上取整。
floor(x) 对一个数进向下取整。
round(x) 把一个数四舍五入为最接近的整数
random() 返回 0 ~ 1 之间的随机数
** 代码
var a = 10.2;
//ceil(x) 对一个数进行上舍入。
document.write(Math.ceil(a)); //11
document.write("<hr/>");
//floor(x) 对一个数进行下舍入。
document.write(Math.floor(a));
document.write("<hr/>");
//round(x) 把一个数四舍五入为最接近的整数
document.write(Math.round(a));
document.write("<hr/>");
//random() 返回 0 ~ 1 之间的随机数
document.write(Math.random());
//生成0-9之间的随机数 0.0 -- 0.9之间的值
document.write("<hr/>");
document.write(Math.floor(Math.random()*10));
Date对象
(1)进行日期操作的对象
(2)使用Date对象,new Date();
(3)方法
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
得到当前的年 getFullYear() 从 Date 对象以四位数字返回年份
得到当前的月 getMonth() 从 Date 对象返回月份 (0 ~ 11)
得到当前的星期 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)
** 如果当前的星期是星期日,返回的是0
** document.write(date.getDay())
得到当前的日 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)
得到当前的小时 getHours()
得到当前的分 getMinutes()
得到当前的秒 getSeconds()
得到毫秒数 getTime() 返回 1970 年 1 月 1 日至今的毫秒数
RegRxp对象
(1)RegExp 对象表示正则表达式
(2)正则表达式:规定字符串出现的规范
(3)使用:new RegExp("正则表达式")
(4)方法:
* test() 检索字符串中指定的值。如果存在匹配的字符返回 true,如果不存在匹配的字符返回 false。
(5)代码
//创建正则表达式对象
var reg = new RegExp("[a]");
//创建一个字符串
var name = "lisi";
//使用正则对象匹配字符串
var flag = reg.test(name);
document.write(flag);
BOM对象
文档对象模型(共5个对象)
navigator : 浏览器的信息
screen : 屏幕的信息
history : 访问地址的历史信息
常用方法:go()
Go(-1)
Go(1);
location: 定位信息 (地址栏)设置url
常用属性:
href 设置或返回完整的 URL
location.href:获取
location.href=”url”设置
window :对象是窗口对象,是顶层对象(可省略不写)
通过window可以获取其他的四个对象
window.location 等价于 location
window.history 等价于 history
。。。。
常用方法: Alert() Confirm()确认框 Prompt 输入框
定时器:
设置定时器
setInterval(code,毫秒数):周期执行
setTimeout(code,毫秒数):延迟多长事件后 只执行一次.
例如:
setInterval(showAd,4000);
serInterval("showAd()",4000);
清除定时器
clearInterval(id):
clearTimeout(id):
打开和关闭
open(url):打开
close():关闭js的全局变量和局部变量
js的全局函数
(1)不属于任何对象,可以使函数
(2)主要的函数
eval(): 把字符串当成js代码执行
** var str = "alert('123456');";
//alert(str);
eval(str);
isNaN() 检查某个值是否是数字
** 如果是数字返回 false,如果不是一个数字返回 true。
parseInt() 解析一个字符串并返回一个整数
** var str1 = "123";
alert(parseInt(str1)+1);
encodeURI() 把字符串编码为 URI
** var str2 = "abc测试中文";
var encodestr2 = encodeURI(str2);
document.write(str2);
document.write("<br/>");
document.write(encodestr2);
decodeURI() 解码某个编码的 URI
** var decodestr2 = decodeURI(encodestr2);
js的函数
在js里面定义函数有三种方式
第一种:使用关键字 function 方法名称(参数列表) { 方法体和返回值 }
注意一:参数列表,不需要写类型(var),直接写参数名称
注意二:返回值,根据实际需要可以有也可以没有
代码
function test1() {
alert("123456");
}
//实现两个数的相加
function add1(a,b) {
var sum = a+b;
return sum;
}
alert(add1(2,3));
第二种:匿名函数,使用关键字function(参数列表) { 方法体和返回值; }
var test1 = function(a,b) {
return a+b;
}
//调用函数alert(test1(3,4));
第三种:动态函数(方法体和返回值,包含参数列表都是通过参数传递进来的)
* 使用js里面的内置对象 new Function("参数列表","方法体和返回值")
var param = "a,b";
var method = "var sum;sum=a+b;return sum;";
var test2 = new Function(param,method);
//调用函数
alert(test2(5,6));
js的函数的重载
js里面是否存在函数的重载?
第一,在js不存在重载
第二,可以使用js函数里面arguments数组模拟重载的效果
(3)模拟重载的效果
* 在js里面有一个数组arguments,保存传递进来的参数,使用这个数组模拟重载的效果
* 代码
//模拟重载的效果
//在js函数里面有一个数组 arguments,保存传递进来的参数的
function add1() {
//alert(arguments.length);
//遍历数组
/*for(var i=0;i<arguments.length;i++) {
alert(arguments[i]);
}*/
//模拟重载的效果(有几个参数,实现这几个参数的相加)
var sum = 0;
for(var i=0;i<arguments.length;i++) {
sum += arguments[i];
}
return sum;
}
//调用
alert(add1(1,2));
alert(add1(1,2,3));
alert(add1(1,2,3,4));
事件
(1)什么是事件:在html的元素里面可以触发事件调用js里面的函数
(2)在html的标签上面如何使用事件
Javascript绑定事件的形式
第一种:在元素绑定回调函数
通过元素的事件属性:<xxx onxx=”韩硕名(参数)”><>
<input type="button" value="第一种方式" οnclick="add1();"/>
第二种:派发事件
<xxx onxx=”韩硕名(参数)”><>
document.getElementById("buttonid1").onclick = function() {
alert("aaaaa");
};
单击事件
onclick:鼠标点击事件
<input type="text" οnclick="test2();"/>
焦点事件
onfocus:获取焦点
onblur :失去焦点
表单事件
onsubmit 事件会在表单中的确认按钮被点击时发生
<form οnsubmit="return chc()">
onchange :事件会在域的内容改变时发生,常用在下拉表单中
页面或元素加载事件:
onload :html页面在加载时候触发事件,调用响应的js方法(先加载页面后调用方法)
<body οnlοad="init()">
onmouseover : 鼠标被移到某元素之上
onmouseout : 鼠标从某元素移开
onkeypress[pres] 点击键盘上面的某个键,调用方法
<input type="text" id="textid1" οnkeypress="key1(event);"/>
function key1(obj) {
//alert(obj.keyCode);
//如果点击键盘上面的回车键 ,调用方法 13
if(obj.keyCode==13) {
alert("key1");
}
}
DOM对象
document object model:(文档对象模型)
文档:指的是标记型文档(html、xml)
对象:在对象里面有属性和方法
使用dom里面提供的对象里面的属性和方法,对标记型文档进行操作
当浏览器接受到dom对象, 要想使用dom对象标记型文档进行操作,首先需要解析标记型文档(html为例),html中包含 标签、属性、文本内容
(2)使用dom解析html
解析过程:根据html的层级结构在内存中分配一个树形结构,如下图:
HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)。它对于我们很好地理解网页各个元素,标签和控件搭配,以及各种js,css等的加载会有一些帮助
DOM方法:
* document对象,代表整个文档
* element对象,代表标签
* 属性对象
* 文本对象
* Node节点对象,是这些对象的父对象,在找不到想要使用的方法,到Node里面找
(3)DHTML的简介
* 不是一种技术,是很多技术的简称。
* 包含的技术:
** html:封装数据
** css:使用属性和属性值修改数据的样式
** ECMAScript:语句和语法
** DOM:对标记型文档进行操作
节点(node)
文档节点 document
元素节点 element
属性节点 attribute
文本节点 text
三种获取特定元素的方法:
getElementById(id)、getElementTagName(标签名)、getElementClassName(class名)
总结:
一份文档就是一颗节点树节点分为: 元素节点、属性节点、和文本节点等getElementById将返回一个对象,该对象对应这文档里的一个特定元素节点。getElementTagName返回一个对象数组,该数组对应文档标签名getElementClassName返回一个对象数组,该数组对应标签的class属性每个节点是一个对象
获取和设置属性
获取属性:getAttribute(属性名)
设置属性:setAttribute(属性名:属性值)