1.JS概述
JS,全称JavaScript,一门专门用于浏览器解析和执行的语言规范,属于事件驱动语言。
本次学习主要包括四大部分,即JS基础语法、DOM编程、BOM编程以及JSON格式。
2.JS基础语法→ES6规范/ECMA-262规范
首先明确一点,即JS是一门弱类型语言,不同于java的强类型语言,java中变量在使用前必须声明为某个特定的类型,然后一直放在对应类型的容器中,而JS则不需要指定具体的类型,变量的类型由其右侧赋予的值动态决定!
2.1 数据类型、变量
第一部分:数据类型综述
JS中数据类型分为原始类型和引用类型:
- 原始类型:String、Boolean、Number、Undefined、Null
- 引用类型:Object及其子类
特别的,我们用typeof 变量名来求变量的类型:
typeof a
结果6选1:"undefined"、"number"、"object"、"boolean"、"string"、"function"
【注意】JS中用==判断是否值相等,===判断值和类型是否完全一致。
var i;
alert(typeof i);
var x = false;alert(typeof x);
var y = 10;alert(typeof y);
var z = null;alert(typeof z);//返回“object”;
var w = "sadfd";alert(typeof w);
var obj = new Object();
alert(typeof obj);//返回“object”;
function a(){}
alert(typeof a);//"function"
alert(typeof a());//"undefined"
下面为等号测试:
alert(typeof null);//"object"
alert(typeof undefined);//undefined""
alert(typeof NaN);//number""
alert("我是==分割线");
alert(null==NaN);//false
alert(null==undefined);//true????????
alert(undefined==NaN);//false
alert("我是===分割线");
alert(null===NaN);//false
alert(null===undefined);//false
alert(undefined===NaN);//false
alert("我是true和1的分割线");
alert(1==true);//true 类似于equals方法;
alert(1===true);//false
第二部分:变量
第一点:变量声明:
var 变量名;
【注意】变量声明了但是没有赋值则默认为unidefined,如果未声明就使用变量则会报错。
第二点:变量分类
JS中变量分为全局变量和局部变量,区别在于是否在函数内声明。
特别的,如果在函数内部直接赋值,但是并未声明,则JS默认其为全局变量!
【注意2】全局变量消耗内存,非必要建议使用局部变量。
第三部分:数据类型详解
第一个:Number类
Number类可以是:Infinity、NaN、3、9.44、-33、-4.44;
NaN:当期待的结果是数字但是经过运算后发现不是数字的时候,就返回NaN:
var a =3;
var b ="dasf";
alert(a/b);//NaN
Number有四个重点掌握的函数:
isNaN(a) //判断a是否是NaN类型,如果isNaN为true,则是一个NaN
//parseInt(),parseFloat(),Math.ceil();
alert(parseInt(3.33));
alert(parseInt("3.33"));
alert(parseFloat(3.333)+22);
alert(Math.ceil('-2.22'));
alert(Math.ceil('2.22'));
第二个:Boolean类
最重要的就是Boolean()函数,将非布尔类型转换为布尔类型:
//总结:“有”就转换为true;没有就转换为false;
alert(Boolean(1));//true
alert(Boolean(0));//false
alert(Boolean(""));//false
alert(Boolean(" "));//true;
alert(Boolean(null));//false
alert(Boolean(undefined));//false
alert(Boolean(NaN));//false
alert(Boolean(Infinity));//true!!!!
while(0.000000000000000){//认为0.0==0;
alert("hh");
}
alert(typeof null)//返回"object"
第三个:Undefined类
此类型只有undefined这个值,可以默认赋值,也可以手动赋值为undefined。
var uni;
alert(typeof nui);//"unidefined";
var un2 = unidefined;
第四个:String类
属性:
prototype属性
constructor属性
函数:
toString();
valueOf();
toLocalString();
在JS中,String有两种创建方法,称之为小String和大String
var lowString = "saf";
alert(typeof lowString);//"string"
var bigString = new String("jjj");
alert(typeof bigString );//"object"
不管怎样,他们共享如下方法:
alert("abcdefgh".substr(2,4));//从2开始的长度为4个的字符串;
alert("abcdefgh".substring(2,4));//从2到3的子串;
alert("ABCDEFFEDBCA").repalce("A","g")//替换首次出现的字符;可以用正则表达式;
alert("abcdefgh".indexOf("a"));//子串匹配;
alert("ABCDEFFEDBCA").toLowerCase());//全部转换为小写;
第五个:Object类
该类是所有引用类的老祖宗,其中最重要的属性是protype属性。
第一个:如何创建对象?
第一步:创建自定义类
法1:function ObjectClass(name,id){
this.name = name;
this.id = id;
}
法2:ObjectClass2 = function(name,id){
this.name = name;
this.id = id;
this.getId = function(){
return this.id;
}
}
第二步:new对象
var x1 = new ObjectClass("张三",300);
var x2 = new ObjectClass2("李四",600);
值得注意的是,如果直接调用ObjectClass()则是函数调用,new才是对象创建。
第三步:属性访问
法1:alert(x1.name);
法2:alert(x2["id"]);
第二个:如何随意拓展类的属性
第一点:拓展自定义类
ObjectClass.protype.getName = function(){
return this.name;
}
alert(x1.getName());//注意,这里拓展的是方法;
第二点:拓展内置类
String.protype.prt = function(){
return "nihao";
}
alert("sadf".prt());//注意,这里拓展的是方法;
第六个:Null类
2.2 函数
在JS中,将完成某些功能的语句称为函数,关键字:function
第一个:语法
法1:
function 函数名(形参列表){函数体}
法2:
函数名= function (形参列表){ 函数体}
由于JS是弱类型,因此函数参数类型、返回值类型都不用加上!
第二个:函数赋值过程
function sum(a,b){
return a+b;
}
var s = sum(1,2);
alert(s);
var t= sum("jaav+");//赋给第一个形参,第二个默认赋值undefined;
alert(t);
var t3= sum();//返回NAN值,一个具体的不存在的值,该值不是参数;;;
alert(t3);
alert(sum(100,9,3));//返回前两个数之和;
第三个:函数重名的解析过程
function test(s){alert("test text");}
function test(){
alert("test");
}//JS中函数不能重名,否则此时会直接覆盖前面定义的函数;
test(300);
第四个:函数的void用法
void用于实现这样的需求:有超链接样式,但是点击后不跳转。
<a href="javascript:void(0)" onclick = 'window.alert("点击成功")' >
这里加上javascript的意思是告诉浏览器,我这一段是自带代码,不是路径名。
此时你会看到这种效果:
2.3 控制语句
除了JAVA中的选择(if-else,switch)、循环(for、while、break、continue)外,JS中有with和for ...in语句,可以简单了解!
//1.遍历数组
var arr = [1,2,false,"fasdf"];
for(var i in arr){
alert(arr[i];//i是数组下标
}
//2.迭代对象 for...in
User = function(name,pwd){
this.name=name;
this.pwd=pwd;}
var u =new User("zhagnsan",12456);
for(var shuxing in u){
alert(u[shuxing]);
alerrt(u.shuxing);}//注意shuxing自动为string类型;
//3.自动赋值 with
with(u){
alert(name);//等价于 alert(u.name);}
2.4 事件
JS是事件驱动型的语句,怎么理解?可以理解为浏览器是一个监视者,无时无刻等待着用户发出如点击鼠标、敲键盘等动作,一旦指定动作发送,则执行某些操作,这就实现了交互性。
2.4.1 事件分类
分类:
blur
focus
click
dbclick
mousedown
mouseover
mousemove
mouseout
mouseup
reset
submit
change 下拉列表改变/文本框内容改变
select 文本被选中
load 整个html页面所有页面元素加载完毕后发生
与此相关的概念是事件句柄,我们说事件是实实在在发生的动作,可以理解为调用某个函数,那么与此相关的事件句柄则是指该动作对象,规则是在事件前加上on关键字,如onclick就是点击事件句柄。
2.4.2 事件注册
将事件与想定义的规则联系起来就称为事件注册,例如将onclick注册到打印输出“你好”,这就是一个案例。
//注册方式1
<input type = "button" value="hello onclick='sayhello()'"/>
//这里是注册到这里,事件发生后才去调用;
function sayhello(){
alert("sfa");}
//第二种方式:纯js代码
<input type ="button" value="hello2" id="mybt"/>
<script type="text/javascript">
/*
第一步:获取按钮对象;
*/
function doSome(){
alert("dosome");
}
var bnobj = document.getElementById("mybt");
//第二步:给按钮对象的onclick属性赋值
bnobj.onclick = doSome;
//注意千万不要加小括号,bnobj.onclick = doSome();是错误的 加了就会先执行函数!!
//这行代码的意思是将doSome函数注册到onclick事件上;
var s= document.getElementById("mybt");
s.onclick = function (){//匿名函数
alert(434);
}
//一行代码:
document.getElementById("mybt").onclick = function(){
alert("kkk");
}
</script>
<script type="text/javascript">
window.onload = function (){
document.getElementById("mybt").onclick = function(){
alert("sajdfjsf");
}
}
//页面打开时开始注册大function到onload,onload执行后在执行大function时再注册内部onclick;
</script>
<input type="button" value="呵呵" id="mybt"/>
【执行顺序】首先明确,JS代码是自上而下执行的。左侧为onload注册,表示等页面底部按钮加载后执行该右侧绑定的函数,然后当按钮点击事件发生后,此时执行内部的函数,即弹窗。
与此相关的是回调函数的概念,其本质是看待问题的角度不一样,其理解是自己写代码别人调用的函数,以java举例如下:
public class hh(){
public static void main(String[] args){
run();//站在我的角度,run是正向调用;}
public static void run(){
System.out.println("run...");//站在run的角度,我写出来被别人调用,故我是回调函数;}
2.4.3 获取指定对象
在java中万物皆对象,JS中也是一样,如标签对象,点击按钮对象等等。
<script>
<input type ="button" value="hello2" id="mybt"/>
<script type="text/javascript">
document.getElementById("mybt").onclick = function(){
alert("kkk"); }
</script>
2.5 项目:回车键捕捉演示
需求:捕捉用户在文本框按下回车键,弹窗显示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS捕捉回车键</title>
</head>
<body>
<script type='text/javascript'>
window.onload = function(){
var x = document.getElementById("username");
x.onkeydown = function(event){
//这里左边一定要加上on才是时间句柄;
//这里当event不写的时候相当于传过来keydown事件;
//这里event是浏览器new出来的该事件对象,左边绑定的事件;;
//对于键盘事件来说,有keycode属性;
// document.getElementById("login").onclick = function(){
// alert(event.keyCode);
//改进:获取键值;esc 值为27,回车键为13;
//敲回车登录:
// document.getElementById("login").onclick = function(){
// alert("登录成功,恭喜你");
// }
// alert(event.keyCode);//注意这里必须是大写的KeyCode!!
// // document.getElementById("login").click();
// alert(event.keyCode);
if(event.keyCode===13){
alert("正在测试");
}
//}
// document.getElementById("login").onclick();
}
}
</script>
<input type="text" value = "请输入用户名" id="username" />
<BR/>
<input type="button" value = "登录" id="login" />
</body>
</html>
3.DOM编程
DOM即Document Object Model,文档对象模型,对网页中的结点进行属性设置,其*对象是document。
3.1 修改结点值
//实现点击上下文本框内容互换;
window.onload = function(){
document.getElementById("bu").onclick = function(){
// alert(document.getElementById("te").value);//属性不能加括号,这里的value本质上是下面的input文本框重的value!
// alert(document.getElementById("te").value = "lisi");//属性不能加括号,这里的value本质上是下面的input文本框重的value!
// alert(document.getElementById("te").value );//属性不能加括号,这里的value本质上是下面的input文本框重的value!
// //修改.value的值!!!
alert(typeof document.getElementById("te").value);
var x =document.getElementById("te").value;
document.getElementById("te").value = document.getElementById("te2").value;
document.getElementById("te2").value = x;
// document.getElementById("te2").value = document.getElementById("te").value;
// document.getElementById("te").value ="";
}
}
</script>
<!-- <input type="button" value="nihao" id="one"/> -->
<input type="text" id="te"/>
<br/>
<input type="text" id="te2"/> <br/>
<input type="button" value="上下文转移" id="bu"/>
<input type = "text" value="nihoa" onblur ="alert(this.value)"/>
<!--这里的失去焦点指的是光标移除!,this代表当前input对象;-->
3.2 innerHtml和innerText值
<script type="text/javascript">
//innerHTML和innerText都是div的属性,前者会认为是html代码,后者是字符串;
window.onload = function(){
document.getElementById("btn").onclick = function(){
// alert(11);
//第一步获取div;
var x =document.getElementById("div1");
//第二步:利用innerHTML属性设置元素内部的内容;
x.innerHTML = "<h1>你好啊</h1>"; //当成html代码
// x.innerText = "<h1>你好啊</h1>";//全部当成字符串处理;
}
}
//调试错误:在F12打开控制台看是否出错;
</script>
<input type="button" value="设置div" id="btn" />
<div id="div1"> </div>
3.3 checkbox复选框项目
需求:点击全选按钮就,全部选中,再点击,全部取消;同时如果全部已经选中则全选按钮自动点亮。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>checkbox</title>
</head>
<CENTER>
<body>
<script type="text/javascript">
window.onload = function(){
var names = document.getElementsByName("aihao");//修改位置,因为这里需要无关鼠标单击第一个框;
var zt = document.getElementById("allcheck");
zt.onclick = function(){
for(var i =0;i<names.length;i++){
names[i].checked = zt.checked;
}
}
var totalcount = names.length;
for(var i =0;i<names.length;i++){//这个for循环页面加载的时候进行;
names[i].onclick = function(){//这个for循环在点击某一个按钮后全局搜索;
var checkcount =0;
for(var i =0;i<names.length;i++){
if(names[i].checked){
checkcount++;
}
}
zt.checked = (checkcount==totalcount);
}
}}
</script>
<input type="checkbox" id="allcheck"/>全选<br/>
<input type="checkbox" name="aihao"/ >烫头<br/>
<input type="checkbox" name="aihao"/>吃饭<br/>
<input type="checkbox" name="aihao"/>喝酒<br/>
</body>
</CENTER>
</html>
以下为初次尝试的总结:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>checkbox</title>
</head>
<CENTER>
<body>
<script type="text/javascript">
window.onload = function(){
//检测第一个标签的状态;
var names = document.getElementsByName("aihao");//修改位置,因为这里需要无关鼠标单击第一个框;
//从上到下:
var zt = document.getElementById("allcheck");
zt.onclick = function(){
// zt.checked = (zt.checked?false:true);
//这里不需要手动复制,浏览器已经知道你点击就是checkedbox=true/false;
// zt.checked = true;
for(var i =0;i<names.length;i++){
names[i].checked = zt.checked;
}
}
var totalcount = names.length;
// for(var i =0;i < totalcount;i++){
// if(names[i].checked){
// checkcount++;
// }
// }
// zt.checked = (checkcount==totalcount);
for(var i =0;i<names.length;i++){//这个for循环页面加载的时候进行;
names[i].onclick = function(){//这个for循环在点击某一个按钮后全局搜索;
var checkcount =0;
for(var i =0;i<names.length;i++){
if(names[i].checked){
checkcount++;
}
}
zt.checked = (checkcount==totalcount);
}
// zt.checked = (checkcount==totalcount);
// alert(names[i]);
//测试,每次点击就
}
}
// for(var i =0;i<names.length;i++){
// var checkednum =0;
// if(names[i].checked){
// checkednum++;
// }
// }
// zt.checked=(checkednum==total);
// //从下到上:
// var total = names.length;
// for(var i =0;i<names.length;i++){
// var checkcount = 0;
// names[i].onclick = function(){
// checkcount = (names[i].checked?checkcount++;checkcount--);
// alert(checkcount);
// }
// zt.checked = (checkcount == total?true;false);
// }
}
</script>
<input type="checkbox" id="allcheck"/>全选<br/>
<input type="checkbox" name="aihao"/ >烫头<br/>
<input type="checkbox" name="aihao"/>吃饭<br/>
<input type="checkbox" name="aihao"/>喝酒<br/>
</body>
</CENTER>
</html>
3.4 获取下拉列表的值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
window.onload = function(){
var list = document.getElementById("hh");
list.onchange = function(){
alert(list.value);
}
}
</script>
<!-- //上下两种方法都可以 -->
<select onchange="alert(this.value)" id="hh">
<option value="">请选择省份</option>
<option value="001">重庆市</option>
<option value="002">江苏省</option>
<option value="003">上哈市</option>
</select>
</body>
</html>
3.5 自带时钟类
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示网页时钟!</title>
</head>
<body>
<script type="text/javascript">
// /*JS内置支持类 Date;
// */
// var nowtime = new Date();
// document.write(nowtime);//类比java
// //Sat Nov 27 2021 21:59:25 GMT+0800 (中国标准时间)
// nowtime = nowtime.toLocaleString();
// document.write(nowtime);//2021/11/27 下午9:41:31
// //如何自定义日期格式;
// var t =new Date();
// var year = t.getFullYear();
// var month = t.getMonth();//月份是0-11;
// var day = t.getDay();//日期是一周的第几天,周六为6;
// //0~6;
// //day应该是dayOfWeek;
// document.write("<BR/>");
// document.write(year+"年"+month+"月"+day+"日"+t.getDate()+"号");
// //怎么获取总毫秒数:从1970 1-1 0:0:0
// alert(t.getTime());
// //作用:返回时间戳;
<script type="text/javascript">
// function displaytime(){
// }
// displaytime();
window.onload = function(){
document.getElementById("button").onclick = function(){
var time = new Date();
var Strtime = time.toLocaleString();
document.getElementById("divtime").innerHTML = Strtime;
}
}
</script>
<input type="button" value="显示时间" />
<!-- //注意加引号; -->
<BR/>
<div id="divtime"></div>
</body>
</html>
据此,可以完成时钟小项目,点击开始按钮,时钟开始,结束按钮,时钟停止:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function displaytime(){
// time= ;//显示当前时间;
var Strtime = new Date().toLocaleString();
document.getElementById("divtime").innerHTML = Strtime;
}
function start(){
//每隔一秒调用函数;
v = window.setInterval("displaytime()",1000);
}
function stop(){
//停止并记录当前时间;
window.clearInterval(v);//方法;
}
</script>
<input type="button" id = "jj" value="显示时间" onclick="start()"/>
<input type="button" id = "sop" value="停止按钮" onclick="stop()"/>
<BR/>
<div id="divtime" ></div>
</body>
</html>
3.6 内置Array数组类
var a = [];
var a2 = [1,2,false,"dsf"];
alert(a2.length);
alert(a.length);
alert(a2[a2.length]);//undefined
//新的创建方法;
var s = new Array(3);//这个3表示数组的长度!!;
alert(s.length);
var s2 = new Array(99,8,7);//这个表示数组的长度为3,3个元素!!;
alert(s2.length);
alert(s2[0]);
//数组拼接
alert(s2.join("-"));//按照顺序连接
//push在尾巴加入元素;
s2.push(100);
alert(s2);
//pop:弹出末尾元素
alert(s2.pop());
alert("长度为"+s2.length);
//JS的数组自自动模拟数据结构,先进后出;
s2.reverse();
alert(s2);
3.7 正则表达式
正则表达式,regular expression,用于字符串匹配,java中、javascript、python中都支持。
第一个:基本规则
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 到 m 次
//反义词;
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了 x 以外的任意字符
[^aeiou]匹配除了 aeiou 这几个字母以外的任意字符
第二个:创建正则表达式
法1:var reg = /正则表达式/flags;
法2:var regexp = new RegExp('正则表达式',"flags");
//flags可取:
g:全局匹配
i:忽略大小写
m:多行查找;[]ES规范制定后才指定;如果上面/中是正则表达式时,m不能用;
第三个:正则表达式的test()方法
<script>
window.onload = function(){
var reg = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/;
// reg.test(document.getElementById("email").value)?alert("合法"):alert("非法!");
var x ;
//实现效果:输入正确则返回合法,否则提醒重新输入,并且当光标放在输入框时显示请重新输入的文字一字样;
document.getElementById("btn").onclick = function(){
if(!(x=reg.test(document.getElementById("email").value))){
document.getElementById("emailtest").innerText = "不合法不合法";
document.getElementById("email").onfocus = function(){
document.getElementById("emailtest").innerText="";
}
}
else{
document.getElementById("emailtest").innerText = "恭喜终于合法了";
}
// else{
// document.getElementById("emailtest").innerText = "非常合法";
// }
}
//增加功能,光标回去时显示内容初初始值;
}
</script>
<input type="text" id="email" /><br/><br/>
<input type="button" value="yanzheng" id="btn" /><br/><br/>
<span id ="emailtest" style="color:red;font-size:33px" > </span><br/><br/>
3.8 字符串string的trim拓展
window.onload = function(){
document.getElementById("password").onclick = function(){
var s = document.getElementById("username").value;
s = s.trim();
alert("对象是="+s+"=对象");
alert("http://www.baidu.chhomg/".replace(/\//g,"-"));
//这里不能加^和$符号,因为是字符串的一部分;
//假设IE不能trim怎么办?
//扩展trim函数;
}
}
String.prototype.trim = function(s){
// var reg = /^\S*\S*$/;
// alert("我是重写的trim方法");
//this表示本字符串
return this.replace(/^\s*/,"").replace(/\s*$/,"");
//合并:return this.replace(/^\s|\s*$/,"");
//这里注意\^和$/是可以分开的,正则表达式;
}
</script>
<input type="text" id="username"/>
<input type="button" value= "登录" id="password"/>
3.9 大项目:表单验证
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
window.onload = function(){
var username;
document.getElementById("bd").onclick = function(){
username = document.getElementById("shurukuang").value;
document.getElementById("sp").innerText = isgood(username);
document.getElementById("shurukuang").onfocus = function(){
document.getElementById("sp").innerText = "";
if(isgood(username)=="登陆失败"){
document.getElementById("shurukuang").value="";
}
}
}
//写一部调试异一步;
}
isgood = function (username){
if(username!="" && username.length<=14 && username.length>=6 ){
//可以直接写if username!
//注意要去掉前后空白;
var regexp = /^[0-9a-zA-Z]*$/;
if(regexp.test(username)){
if(document.getElementById("pwdinput").value===realpwd){
return "验证成功";
}
}
}
return "登陆失败";
}
var realpwd = "123456";
<!-- <span id ="emailtest" style="color:red;font-size:33px" > -->
</script>
<form action ="http://www.baidu.com" id="form" method = "post"></form>
用户名:<input type="text" name="username" id="shurukuang"/><br/><br/>
密码:<input type="password" name="password" id="pwdinput"/>
<!-- <span id="sp" style="color:red;font-size:23px"></span><br/><br/> -->
<span id ="sp" style="color:red;font-size:33px" ></span><br/><br/>
<input type="button" value="提交" id="bd"/><BR/><BR/>
<input type="submit" value=登录""/><BR/><BR/>
<input type="reset" value=重置""/>
</body>
</html>
<!--DIV独占一行,span增加一行-->
4.BOM编程
bom,即browser object model,浏览器对象模型,如关闭浏览器窗口、前进后退、获取地址栏URL参数等操作都是属于该模型,可以理解为浏览器的正文上的框内的功能。
4.1 window.open和close方法
<script type="text/javascript">
</script>
<input type="button" value="开启百度(新窗口)" onclick="window.open('http://www.baidu.com/')"/>
<input type="button" value="开启百度(self 当前窗口)" onclick="window.open('http://www.baidu.com/','_self')"/>
<input type="button" value="开启百度(blank 新窗口)" onclick="window.open('http://www.baidu.com/','_blank')"/>
<input type="button" value="开启百度(parent 父窗口)" onclick="window.open('http://www.baidu.com/','_parent')"/>
<input type="button" value="开启百度(top *窗口)" onclick="window.open('http://www.baidu.com/','_top')"/>
<input type="button" value="开启" onclick="window.open('开启测试.html')"/>
<input type="button" value="guanbi(新窗口)" onclick="window.close('开启测试.html')"/>
4.2 弹出提示框
<body>
<script type="text/javascript">
function del(){
var ok = window.confirm("确认删除数据吗?");
alert(ok);
}
//if(window.confirm("确认删除数据吗?"))
</script>
<!--删除操作一定要提醒用户;-->
<input type="button" value="弹出消息框" onclick="del()"/>
</body>
4.3 history历史记录窗口
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>niahao</h1>
</body>
<input type="button" value="后撤" onclick="window.history.back()"/>
<!-- <input type="button" value="后撤" onclick="window.history.go(-1)"/> -->
<input type="button" value="前进" onclick="window.history.go(1)"/>
</html>
4.4 *窗口设置
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
4444444
<!-- 如果不是*窗口,设置为*窗口 -->
<script type="text/javascript">
function setTop(){
console.log(window.top!=window.self);//false;
if(window.top!=window.self){
window.top.location=window.self.location;
// window.top=window.self;
//window.top是*窗口设置 窗口
//window.self是*窗口2 窗口
// window.top.href=window.self;
}
}
</script>
<BR/><input type="button" onclick ="setTop()" value="如果设置为*窗口"/>
<!-- <iframe src="*窗口2.html" width="800px" height="500px"></iframe> -->
</body>
</html>
4.5 浏览器拿到URL方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
/*哪些可以通过浏览器网服务器发请求:
1.表单form
2.超链接
3.document.location
4.window.location
5.window.open("url")
6.直接输入URL回车;
6.以上所有数据可以携带数据,表单是动态的,超链接是静态的;*/
gobaidu = function (){
// window.open("http://www.baidu.com");
//拿到地址栏的参数;
// var locationObj = window.location;
// locationObj.href = "http://www.baidu.com";
// window.location.href = "http://www.jd.com";
// document.location.href = "http://www.taobao.com";
document.location = "http://www.qq.com";
}
</script>
<!-- <iframe src="*窗口2.html" width="800px" height="500px"></iframe> -->
</body>
<input type="button" value="百度" onclick="gobaidu()"/>
<!-- <input type="button" value="百度" onclick="window.open(www.baidu.com)"/> -->
<!-- <input type="button" value="百度" onclick="http://www.baidu.com"/> -->
</html>
5.JSON详解
5.1 json概述
json,javascript object notation,读音:杰森,与XML格式同为通用的数据交换格式,实际开发中使用较多,体积小、易解析、轻量级,而XML体积大、语法严格,一般用作银行,例如前面在javaweb后端的servlet中web.xml我们已经见识过了。
5.2 创建json对象_方法1
//单个json对象
var jsonobj = {
"sno":"110",
"sname":"zahgnsan",
"sex":"男" };
alert(jsonobj.sno+","+jsonobj.sname+","+jsonobj.sex);
//JSON对象数组
var students = [
{"sno":"110","sname":"张三","sex":"女"},
{"sno":"200","sname":"王五","sex":"男"},
{"sno":"300","sname":"李四","sex":"男"}
];//注意分号和逗号的使用;
//遍历
for(var i=0;i<students.length;i++){
alert(students[i].sno+","+students[i].sname+","+students[i].sex);
}
//json嵌套
var user = {
"usercode":"110",
"username":"zahgnsan",
"sex":"男",
"address":{
"city":"北京",
"street":"大兴",
"zipcode":"40234",
"aihao":["smoke","drink","tt"]//爱好是数组,其他是json
}
};
alert(user.address.city);
【注意】JSON在JS中以{}表示,核心为属性及值,各属性之间用逗号隔开;
5.3 创建json对象_方法2_eval函数的使用
eval是js自带函数,作用是把一串字符串当成js命令解释执行,一般情况下实际开发中是java传过来json格式的string字符串,需要将其转化为json对象。
window.eval("var i=100;");
alert("i="+i);//100
//JDBC连接数据库查询的数据在java程序拼接位JSON格式的字符串,但是还不是json对象!
//可以使用eval函数将其转换为JSON对象;
var fromjava = "{\"name\":\"zhagnsan\",\"password\":\"200\"}";//jaVa发过来的
window.eval("var jsonObj ="+fromjava);//新建一个对象;
alert(jsonObj.name);
alert(jsonObj.password);
5.4 大项目:json建表
<!DOCTYPE html>
<html>
<CENTER>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var jsonObj ={
"total":3,
"emps":[
{"empid":100,"name":"smith","sal":800} ,
{"empid":200,"name":"haha","sal":900} ,
{"empid":300,"name":"zdafsf","sal":3000},
]
};
window.onload = function(){
document.getElementById("display").onclick = function(){
// window.eval("<tbody>");
var html="";
for(var i=0;i<jsonObj.total;i++){
var rowInfo = jsonObj.emps[i];
html += "<tr>";
html += "<td>"+rowInfo.empid+"</td>";
html += "<td>"+rowInfo.name+"</td>";
html += "<td>"+rowInfo.sal+"</td>";
html += "</tr>";
// window.eval(str);//要加入到Tbody的innerHtml中;
}
document.getElementById("tby").innerHTML = html;
document.getElementById("count").innerText = jsonObj.total;
}}
</script>
<input type="button" value="显示员工信息" id="display"/>
<h2>员工信息表</h2>
<hr>
<table border="4px">
<th>员工编号 </th>
<th>员工姓名 </th>
<th>员工薪资 </th>
<TR/>
<tbody id="tby">
</tbody>
</table>
总共<span id="count">0</span>条数
</body>
</CENTER>
</html>
<!-- <tbody>
<tr>
<td>100</td>
<td>smith</td>
<td>800</td>
</tr>
<tr>
<td>200</td>
<td>haha</td>
<td>900</td>
</tr>
<tr>
<td>300</td>
<td>zdafsf</td>
<td>1000</td>
</tr>
</tbody> -->
6.总结
6.1 js调试
在js开发中,一定要写一步调试一步,即测试时打开浏览器的F12,看控制台的报错信息,定位错误。
6.2 JS中[]和{}有什么区别
[]是数组,{}JSON格式;
java数组:int[] a ={1,2,3,4,5};
js数组:var x =[1,2,3,4];
JSON: var obj ={"name":"99","pass":003};
JSON是一种数据交换标准,在JS中是一个对象的形式存在;
var obj ={"name":"99","pass":003};
法1:obj.name;
法2:obj["name"]
6.3 后续学习路线
//一般是学习JS框架:
XML
servlet
JSP
EL
JSTL
AJAX
MVC
动态代理
Maven
-->
<!-- 框架Spring,Springmvc,mybatics,ssm三大框架 -->特别的,国企看javase,小公司问项目,直接上手做;大公司问偏原理的东西;sql优化。