欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  一、概述
 
  1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言)
 
  Netscape(网景)接收Nombas的理念,(BrendanEich)在其NetscapeNavigator2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript
 
  微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript.
 
  为了统一三家,ECMA(欧洲计算机制造协会)定义了ECMA-262规范.国际标准化组织及国际电工委员会(ISO/IEC)也采纳ECMAScript作为标准(ISO/IEC-16262)。从此,Web浏览器就开始努力(虽然有着不同的程度的成功和失败)将ECMAScript作为JavaScript实现的基础。EcmaScript是规范.
 
  Javascript在开发中绝大多数情况是基于对象的.也是面向对象的
 
  一个完整的JavaScript实现是由以下3个不同部分组成的:
 
  核心(ECMAScript)
 
  文档对象模型(DOM)Documentobjectmodel(整合js,css,html)
 
  浏览器对象模型(BOM)Broswerobjectmodel(整合js和浏览器)
 
  ECMAScript描述了以下内容:
 
  语法
 
  类型
 
  语句
 
  关键字
 
  保留字
 
  运算符
 
  对象(封装继承多态)基于对象的语言.使用对象.
 
  二、js的引入方式
 
  1.嵌入式
 
  <script>
 
   alert(123)
 
  </script>
 
  2.导入式
 
  <scriptsrc="js/test.js"></script>
 
  三、JavaScript基础知识
 
  1.基础规范
 
  每行结束可以不加分号.没有分号会以换行符作为每行的结束
 
  a=1;b=2;
 
  a=1b=2;------错误
 
  a=1
 
  b=2
 
  //推荐
 
  a=1;
 
  b=2;
 
  {
 
  a=1;
 
  b=2;
 
  //推荐加tab
 
  a=1;
 
  b=2;
 
  }
 
  注释支持多行注释和单行注释/**///
 
  使用{}来封装代码块
 
  2.变量
 
  x=5
 
  y=6
 
  z=x+y
 
  变量是弱类型的(很随便)
 
  声明变量时不用声明变量的类型,统一使用var关键字
 
  vara
 
  一行可以声明多个变量.并且可以是不同类型.
 
  varname="Tom",age=18
 
  声明变量时,可以不用var.如果不用var那么它是全局变量.
 
  变量需要遵循命名规则
 
  Camel标记法
 
  首字母是小写的,接下来的字母都以大写字符开头。例如:
 
  varmyTestValue=0,mySecondValue="hi";
 
  Pascal标记法
 
  首字母是大写的,接下来的字母都以大写字符开头。例如:
 
  varMyTestValue=0,MySecondValue="hi";
 
  匈牙利类型标记法
 
  在以Pascal标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i表示整数,s表示字符串,例如:
 
  variMyTestValue=0,sMySecondValue="hi";
 
  3.常量和标识符
 
  常量:直接在程序中出现的数据值
 
  标识符:
 
  由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
 
  常用于表示函数、变量等的名称
 
  例如:_abc,$abc,abc,abc123是标识符,而1abc不是
 
  JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符
 
  四、数据类型
 
  1.数字类型(Number)
 
  最基本的数据类型
 
  不区分整型数值和浮点型数值
 
  所有数字都采用64位浮点格式存储,相当于Java和C语言中的double格式
 
  能表示的最大值是±1.7976931348623157x10308
 
  能表示的最小值是±5x10-324
 
  整数:
 
  在JavaScript中10进制的整数由数字的序列组成
 
  精确表达的范围是?-9007199254740992(-253)到9007199254740992(253)
 
  超出范围的整数,精确度将受影响
 
  浮点数:
 
  使用小数点记录数据
 
  例如:3.4,5.6
 
  使用指数记录数据
 
  例如:4.3e23=4.3x10^23
 
  16进制和8进制数的表达
 
  16进制数据前面加上0x,八进制前面加0
 
  16进制数是由0-9,A-F等16个字符组成
 
  8进制数由0-7等8个数字组成
 
  NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
 
  2.字符串(String)
 
  由Unicode字符、数字、标点符号组成的序列
 
  字符串常量首尾由单引号或双引号括起
 
  JavaScript中没有字符类型
 
  常用特殊字符在字符串中的表达
 
  字符串中部分特殊字符必须加上右划线\
 
  常用的转义字符\n:换行\':单引号\":双引号\\:右划线
 
  3.布尔型(Boolean)
 
  Boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0
 
  布尔值也可以看作on/off、yes/no、1/0对应true/false
 
  4.Null和Undefined
 
  Undefined类型
 
  Undefined类型只有一个值,即undefined。当声明的变量未初始化时,该变量的默认值是undefined。
 
  当函数无明确返回值时,返回的也是值"undefined";
 
  Null类型
 
  另一种只有一个值的类型是Null,它只有一个专用值null,即它的字面量。值undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等的。
 
  尽管这两个值相等,但它们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象(在讨论typeof运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null。
 
  5.数据类型转换
 
  JavaScript属于松散类型的程序语言
 
  变量在声明的时候并不需要指定数据类型
 
  变量只有在赋值的时候才会确定数据类型
 
  表达式中包含不同类型数据则在计算过程中会强制进行类别转换
 
  数字+字符串:数字转换为字符串
 
  数字+布尔值:true转换为1,false转换为0
 
  字符串+布尔值:布尔值转换为字符串true或false
 
  强制类型转换函数
 
  函数parseInt:强制转换成整数例如parseInt("6.12")=6;parseInt(“12a")=12;parseInt(“a12")=NaN;parseInt(“1a2")=1
 
  函数parseFloat:强制转换成浮点数parseFloat("6.12")=6.12
 
  函数eval:将字符串强制转换为表达式并返回结果eval("1+1")=2;eval("1<2")=true
 
  6.类型查询(typeof)
 
  ECMAScript提供了typeof运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。
 
  函数typeof:查询数值当前类型?(string/number/boolean/object)
 
  例如typeof("test"+3)"string"
 
  例如typeof(null)"object"
 
  例如typeof(true+1)"number"
 
  例如typeof(true-false)"number"
 
  五、运算符
 
  1.算数运算符
 
  加(+)、减(-)、乘(*)、除(/)、余数(%)加、减、乘、除、余数和数学中的运算方法一样例如:9/2=4.5,4*5=20,9%2=1
 
  -除了可以表示减号还可以表示负号例如:x=-y
 
  +除了可以表示加法运算还可以用于字符串的连接例如:"abc"+"def"="abcdef"
 
  递增(++)、递减(--)
 
  假如x=2,那么x++表达式执行后的值为3,x--表达式执行后的值为1
 
  i++相当于i=i+1,i--相当于i=i-1
 
  递增和递减运算符可以放在变量前也可以放在变量后:--i
 
  vari=1;
 
  console.log(i++);
 
  console.log(++i);
 
  console.log(i--);
 
  console.log(--i);
 
  i++和++i在理论上的区别是:
 
  i++:是先把i拿出来使用,然后再+1;
 
  ++i:是先把i+1,然后再拿出来使用;
 
  vara=1;
 
  varb=1;
 
  a=-a;//a=-1
 
  varc="10";
 
  alert(typeof(c));
 
  c=+c;//类型转换
 
  alert(typeof(c));
 
  //-------------------
 
  vard="yuan";
 
  d=+d;
 
  alert(d);//NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
 
  alert(typeof(d));//Number
 
  //NaN特点:
 
  varn=NaN;
 
  alert(n>3);
 
  alert(n<3);
 
  alert(n==3);
 
  alert(n==NaN);
 
  alert(n!=NaN);//NaN参与的所有的运算都是false,除了!=
 
  2.逻辑运算符
 
  等于(==)、不等于(!=)、大于(>)、小于(<)?大于等于(>=)、小于等于(<=)
 
  与(&&)、或(||)、非(!)
 
  逻辑AND运算符(&&)
 
  逻辑AND运算的运算数可以是任何类型的,不止是Boolean值。
 
  如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值:
 
  如果某个运算数是null,返回null。
 
  如果某个运算数是NaN,返回NaN。
 
  如果某个运算数是undefined,返回undefined。
 
  逻辑OR运算符(||)
 
  与逻辑AND运算符相似,如果某个运算数不是Boolean值,逻辑OR运算并不一定返回Boolean值
 
  3.赋值运算符
 
  赋值=
 
  JavaScript中=代表赋值,两个等号==表示判断是否相等
 
  例如,x=1表示给x赋值为1
 
  if(x==1){...}程序表示当x与1相等时
 
  if(x==“on”){…}程序表示当x与“on”相等时
 
  配合其他运算符形成的简化表达式
 
  例如i+=1相当于i=i+1,x&=y相当于x=x&y
 
  4.等性运算符
 
  执行类型转换的规则如下:
 
  如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true为1。
 
  如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
 
  如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
 
  如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
 
  在比较时,该运算符还遵守下列规则:
 
  值null和undefined相等。
 
  在检查相等性时,不能把null和undefined转换成其他值。
 
  如果某个运算数是NaN,等号将返回false,非等号将返回true。
 
  如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回true,否则两个运算数不等。
 
  5.关系运算符
 
  varbResult="Blue"<"alpha";
 
  alert(bResult);//输出true
 
  在上面的例子中,字符串"Blue"小于"alpha",因为字母B的字符代码是66,字母a的字符代码是97。
 
  比较数字和字符串
 
  另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
 
  varbResult="25"<"3";
 
  alert(bResult);//输出"true"
 
  上面这段代码比较的是字符串"25"和"3"。两个运算数都是字符串,所以比较的是它们的字符代码("2"的字符代码是50,"3"的字符代码是51)。
 
  不过,如果把某个运算数该为数字,那么结果就有趣了:
 
  varbResult="25"<3;
 
  alert(bResult);//输出"false"
 
  这里,字符串"25"将被转换成数字25,然后与数字3进行比较,结果不出所料。
 
  总结:
 
  比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
 
  比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较.
 
  6.Boolean运算符
 
  参数类型 结果
 
  Undefined false
 
  Null false
 
  Boolean 结果等于输入的参数(不转换)
 
  Number 如果参数为+0,-0或NaN,则结果为false;否则为true。
 
  String 如果参数为空字符串,则结果为false;否则为true。
 
  Object true
 
  六、条件控制
 
  1.if语句
 
  if-else基本格式
 
  if(表达式){
 
  语句1;......
 
  }
 
  else{
 
  语句2;.....
 
  }
 
  if语句嵌套格式
 
  if(表达式1){
 
  语句1;
 
  }elseif(表达式2){
 
  语句2;
 
  }elseif(表达式3){
 
  语句3;
 
  }else{
 
  语句4;
 
  }
 
  2.switch语句
 
  switch基本格式
 
  switch(表达式){
 
  case值1:语句1;break;
 
  case值2:语句2;break;
 
  case值3:语句3;break;
 
  default:语句4;
 
  }
 
  1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
 
  2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择执行哪一个case的语句块
 
  3.if..else的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载一次。
 
  所以在多路分支时用switch比if..elseif..else结构要效率高。
 
  3.for循环
 
  for循环基本格式
 
  for(初始化;条件;增量){
 
  语句1;...
 
  }
 
  实现条件循环,当条件成立时,执行语句1,否则跳出循环体
 
  4.while循环
 
  while循环基本格式
 
  while(条件){
 
  语句1;...
 
  }
 
  运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环
 
  七、异常处理
 
  try{
 
  //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
 
  }
 
  catch(e){
 
  //如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
 
  //e是一个局部变量,用来指向Error对象或者其他抛出的对象
 
  }
 
  finally{
 
  //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
 
  }
 
  注:主动抛出异常throwError('xxxx')
 
  八、ECMA对象
 
  从传统意义上来说,ECMAScript并不真正具有类。事实上,除了说明不存在类,在ECMA-262中根本没有出现“类”这个词。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。
 
  varo=newObject();
 
  对象的概念与分类:
 
  由ECMAScript定义的本地对象.独立于宿主环境的ECMAScript实现提供的对象.(nativeobject)
 
  ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现.这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262只定义了两个内置对象,即Global和Math(它们也是本地对象,根据定义,每个内置对象都是本地对象)。(built-inobject)
 
  所有非本地对象都是宿主对象(hostobject),即由ECMAScript实现的宿主环境提供的对象。所有BOM和DOM对象都是宿主对象。
 
  object对象:ECMAScript中的所有对象都由这个对象继承而来;Object对象中的所有属性和方法都会出现在其他对象中
 
  ToString():返回对象的原始字符串表示。
 
  ValueOf():返回最适合该对象的原始值。对于许多对象,该方法返回的值都与ToString()的返回值相同。
 
  11种内置对象
 
  包括:
 
  Array,String,Date,Math,Boolean,NumberFunction,Global,Error,RegExp,Object
 
  简介:
 
  在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是通过对象实现的
 
  1.String对象
 
  创建String对象
 
  //创建字符串对象
 
  varstr1="hello"
 
  varstr2=newString("hello")
 
  console.log(typeofstr1)//String
 
  console.log(typeofstr2)//Object
 
  String对象的属性
 
  length获取字符串长度
 
  str1="hello"
 
  console.log(str1.length)
 
  String对象的方法
 
  格式编排
 
  String对象提供了一组针对HTML格式的方法,如x.anchor()返回锚定义字符串<a>x</a>,x.bold()返回粗体表示字符串<b>x</b>,x.sup()返回上标格式字符串<sup>x</sup>。
 
  varstr1="hello"
 
  console.log(str1.bold())//<b>hello<b>
 
  console.log(str1.italics())//<i>hello<i>
 
  console.log(str1.anchor())//<a>hello<a>
 
  大小写转换
 
  varstr1="AbcdEfgh";
 
  varstr2=str1.toLowerCase();
 
  varstr3=str1.toUpperCase();
 
  alert(str2);
 
  //结果为"abcdefgh"
 
  alert(str3);
 
  //结果为"ABCDEFGH"
 
  获取指定字符
 
  x.charAt(index)
 
  x.charCodeAt(index)
 
  x代表字符串对象
 
  index代表字符位置
 
  index从0开始编号
 
  charAt返回index位置的字符
 
  charCodeAt返回index位置的Unicode编码
 
  varx="helloworld"
 
  console.log(x.charAt(6))//w
 
  console.log(x.charCodeAt(6))//119
 
  查询字符串
 
  x.indexOf(findstr,index)
 
  x.lastIndexOf(findstr)
 
  varx="helloworld"
 
  console.log(x.indexOf("l"))//2
 
  console.log(x.lastIndexOf("l"))//9
 
  截取字符串
 
  x.substr(start,length)
 
  x.substring(start,end)
 
  x代表字符串对象
 
  start表示开始位置
 
  length表示截取长度
 
  end是结束位置加1
 
  第一个字符位置为0
 
  varstr1="abcdefgh";
 
  varstr2=str1.substr(2,4);
 
  varstr3=str1.substring(2,4);
 
  alert(str2);
 
  //结果为"cdef"
 
  alert(str3);
 
  //结果为"cd"
 
  切片
 
  x.slice(start,end)
 
  varstr1="abcdefgh";
 
  varstr2=str1.slice(2,4);
 
  varstr3=str1.slice(4);
 
  varstr4=str1.slice(2,-1);
 
  varstr5=str1.slice(-3,-1);
 
  alert(str2);
 
  //结果为"cd"
 
  alert(str3);
 
  //结果为"efgh"
 
  alert(str4);
 
  //结果为"cdefg"
 
  alert(str5);
 
  //结果为"fg"
 
  替换字符串
 
  x.replace(findstr,tostr)
 
  varstr1="abcdefgh";
 
  varstr2=str1.replace("cd","aaa");
 
  alert(str2);
 
  //结果为"abaaaefgh"
 
  分割字符串
 
  x.split(str)
 
  varstr1="a,b,c,d,e"
 
  varstrArray=str1.split(",")
 
  console.log(strArray)//Array(5)["a","b","c","d","e"]
 
  连接字符串
 
  y=x.concat(addstr)
 
  varstr1="abcd";
 
  varstr2=str1.concat("efgh");
 
  alert(str2);
 
  //结果为"abcdefgh"
 
  2.Array对象
 
  java中数组的特性,规定是什么类型的数组,就只能装什么类型.只有一种类型.
 
  js中的数组特性1:js中的数组可以装任意类型,没有任何限制.2:js中的数组,长度是随着下标变化的.用到多长就有多长.
 
  创建数组对象
 
  创建方式1:
 
  vara=[1,2,3];
 
  创建方式2:
 
  vara=newArray();//创建数组时允许指定元素个数也可以不指定元素个数。
 
  newArray(size);//if1个参数且为数字,即代表size,notcontent
 
  //创建二维数组
 
  varcnweek=newArray(7);
 
  for(vari=0;i<=6;i++){
 
  cnweek[i]=newArray(2);
 
  }
 
  Array对象的属性
 
  length获取数组元素的个数
 
  Array对象的方法
 
  连接数组-join方法
 
  x.join(bystr)
 
  vararr1=[1,2,3,4,5,6,7];
 
  varstr1=arr1.join("-");
 
  alert(str1);
 
  //结果为"1-2-3-4-5-6-7"
 
  连接数组-concat方法
 
  x.concat(value,...)
 
  vara=newArray(1,2,3);
 
  varb=a.concat(4,5);
 
  alert(a.toString());
 
  //返回结果为1,2,3
 
  alert(b.toString());
 
  //返回结果为1,2,3,4,5
 
  数组排序-reversesort
 
  x.reverse()
 
  x.sort()
 
  vararr1=[32,12,111,444];
 
  //vararr1=["a","d","f","c"];
 
  arr1.reverse();//颠倒数组元素
 
  alert(arr1.toString());
 
  //结果为444,111,12,32
 
  arr1.sort();//排序数组元素
 
  alert(arr1.toString());
 
  //结果为111,12,32,444
 
  //------------------------------
 
  arr=[1,5,2,100];
 
  //arr.sort();
 
  //alert(arr);
 
  //如果就想按着数字比较呢?
 
  functionintSort(a,b){
 
  if(a>b){
 
  return1;//-1
 
  }
 
  elseif(a<b){
 
  return-1;//1
 
  }
 
  else{
 
  return0
 
  }
 
  }
 
  arr.sort(intSort);
 
  alert(arr);
 
  functionIntSort(a,b){
 
  returna-b;
 
  }
 
  数组切片-slice
 
  x.slice(start,end)
 
  vararr1=['a','b','c','d','e','f','g','h'];
 
  vararr2=arr1.slice(2,4);
 
  vararr3=arr1.slice(4);
 
  vararr4=arr1.slice(2,-1);
 
  alert(arr2.toString());
 
  //结果为"c,d"
 
  alert(arr3.toString());
 
  //结果为"e,f,g,h"
 
  alert(arr4.toString());
 
  //结果为"c,d,e,f,g"
 
  删除子数组
 
  x.splice(start,deleteCount,value,...)
 
  x代表数组对象
 
  splice的主要用途是对数组指定位置进行删除和插入
 
  start表示开始位置索引
 
  deleteCount删除数组元素的个数
 
  value表示在删除位置插入的数组元素
 
  value参数可以省略
 
  vara=[1,2,3,4,5,6,7,8];
 
  a.splice(1,2);
 
  //a变为[1,4,5,6,7,8]
 
  alert(a.toString());
 
  a.splice(1,1);
 
  //a变为[1,5,6,7,8]
 
  alert(a.toString());
 
  a.splice(1,0,2,3);
 
  //a变为[1,2,3,5,6,7,8]
 
  alert(a.toString());
 
  数组的进出栈操作
 
  x.push(value,...)压栈
 
  x.pop()弹栈
 
  x.unshift(value,...)
 
  x.shift()
 
  vararr1=[1,2,3];
 
  arr1.push(4,5);
 
  alert(arr1);
 
  //结果为"1,2,3,4,5"
 
  arr1.push([6,7]);
 
  alert(arr1)
 
  //结果为"1,2,3,4,5,6,7"
 
  arr1.pop();
 
  alert(arr1);
 
  //结果为"1,2,3,4,5"
 
  vararr1=[1,2,3];
 
  arr1.unshift(4,5);
 
  alert(arr1);
 
  //结果为"4,5,1,2,3"
 
  arr1.unshift([6,7]);
 
  alert(arr1);
 
  //结果为"6,7,4,5,1,2,3"
 
  arr1.shift();
 
  alert(arr1);
 
  //结果为"4,5,1,2,3"
 
  3.Date对象
 
  创建Date对象
 
  //方法1:不指定参数
 
  varnowd1=newDate();
 
  console.log(nowd1.toLocaleString());//2019/7/31下午5:25:30
 
  //方法2:参数为日期字符串
 
  varnowd2=newDate("2004/3/2011:12");
 
  console.log(nowd2.toLocaleString());//2004/3/20上午11:12:00
 
  varnowd3=newDate("04/03/2011:12");
 
  console.log(nowd3.toLocaleString());//2020/4/3上午11:12:00
 
  //方法3:参数为毫秒数
 
  varnowd3=newDate(5000);
 
  console.log(nowd3.toLocaleString());//1970/1/1上午8:00:05
 
  console.log(nowd3.toUTCString());//Thu,01Jan197000:00:05GMT
 
  //方法4:参数为年月日小时分钟秒毫秒
 
  varnowd4=newDate(2004,2,20,11,12,0,300);
 
  console.log(nowd4.toLocaleString());//2004/3/20上午11:12:00
 
  //毫秒并不直接显示
 
  Date对象的方法
 
  获取日期和时间
 
  获取日期和时间
 
  getDate()获取日
 
  getDay()获取星期
 
  getMonth()获取月(0-11)
 
  getFullYear()获取完整年份
 
  getYear()获取年
 
  getHours()获取小时
 
  getMinutes()获取分钟
 
  getSeconds()获取秒
 
  getMilliseconds()获取毫秒
 
  getTime()返回累计毫秒数(从1970/1/1午夜)
 
  设置日期和时间
 
  //设置日期和时间
 
  //setDate(day_of_month)设置日
 
  //setMonth(month)设置月
 
  //setFullYear(year)设置年
 
  //setHours(hour)设置小时
 
  //setMinutes(minute)设置分钟
 
  //setSeconds(second)设置秒
 
  //setMillliseconds(ms)设置毫秒(0-999)
 
  //setTime(allms)设置累计毫秒(从1970/1/1午夜)
 
  varx=newDate();
 
  x.setFullYear(1997);//设置年1997
 
  x.setMonth(7);//设置月7
 
  x.setDate(1);//设置日1
 
  x.setHours(5);//设置小时5
 
  x.setMinutes(12);//设置分钟12
 
  x.setSeconds(54);//设置秒54
 
  x.setMilliseconds(230);//设置毫秒230
 
  document.write(x.toLocaleString()+"<br>");
 
  //返回1997年8月1日5点12分54秒
 
  x.setTime(870409430000);//设置累计毫秒数
 
  document.write(x.toLocaleString()+"<br>");
 
  //返回1997年8月1日12点23分50秒
 
  日期和时间的转换
 
  日期和时间的转换:
 
  getTimezoneOffset():8个时区×15度×4分/度=480;
 
  返回本地时间与GMT的时间差,以分钟为单位
 
  toUTCString()
 
  返回国际标准时间字符串
 
  toLocalString()
 
  返回本地格式时间字符串
 
  Date.parse(x)
 
  返回累计毫秒数(从1970/1/1午夜到本地时间)
 
  Date.UTC(x)
 
  返回累计毫秒数(从1970/1/1午夜到国际时间)
 
  4.RegExp对象
 
  //RegExp对象
 
  //在表单验证时使用该对象验证用户填入的字符串是否符合规则.
 
  //创建正则对象方式1参数1正则表达式参数2验证模式gglobal/i忽略大小写.//参数2一般填写g就可以,也有“gi”.
 
  //用户名首字母必须是英文,除了第一位其他只能是英文数字和_.长度最短不能少于6位最长不能超过12位
 
  //----------------------------创建方式1
 
  /*varreg1=newRegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$","g");
 
  //
 
  //验证字符串
 
  varstr="bc123";
 
  alert(reg1.test(str));//true
 
  //----------------------------创建方式2/填写正则表达式/匹配模式;
 
  varreg2=/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
 
  alert(reg2.test(str));//true
 
  */
 
  //-------------------------------正则对象的方法-------------------
 
  //test方法==>测试一个字符串是否复合正则规则.返回值是true和false.
 
  //-------------------------String中与正则结合的4个方法------------------.
 
  //macthsearchsplitreplace
 
  varstr="helloworld";
 
  //alert(str.match(/o/g));//查找字符串中复合正则的内容.
 
  //alert(str.search(/h/g));//0查找字符串中符合正则表达式的内容位置
 
  //alert(str.split(/o/g));//按照正则表达式对字符串进行切割.返回数组;
 
  alert(str.replace(/o/g,"s"));//hellswsrld对字符串按照正则进行替换.
 
  5.Math对象
 
  //Math对象
 
  //该对象中的属性方法和数学有关.
 
  //Math是内置对象,与Global的不同之处是,在调用时需要打出"Math."前缀.
 
  abs(x)返回数的绝对值。
 
  exp(x)返回e的指数。
 
  floor(x)对数进行下舍入。
 
  log(x)返回数的自然对数(底为e)。
 
  max(x,y)返回x和y中的最高值。
 
  min(x,y)返回x和y中的最低值。
 
  pow(x,y)返回x的y次幂。
 
  random()返回0~1之间的随机数。
 
  round(x)把数四舍五入为最接近的整数。
 
  sin(x)返回数的正弦。
 
  sqrt(x)返回数的平方根。
 
  tan(x)返回角的正切。
 
  6.Function对象
 
  函数定义
 
  function函数名(参数){?函数体;
 
  return返回值;
 
  }
 
  var函数名=newFunction("参数1","参数n","function_body");
 
  功能说明:
 
  可以使用变量、常量或表达式作为函数调用的参数
 
  函数由关键字function定义
 
  函数名的定义规则与标识符一致,大小写是敏感的
 
  返回值必须使用return
 
  注意:js的函数加载执行与python不同,它是整体加载完才会执行,所以执行函数放在函数声明上面或下面都可以
 
  Function对象的属性
 
  length函数的参数个数
 
  Function对象的方法
 
  Function对象也有与所有对象共享的valueOf()方法和toString()方法。这两个方法返回的都是函数的源代码,在调试时尤其有用。
 
  函数的调用
 
  functionfunc1(a,b){
 
  alert(a+b);
 
  }
 
  func1(1,2);//3
 
  func1(1,2,3);//3
 
  func1(1);//NaN
 
  func1();//NaN
 
  //只要函数名写对即可,参数怎么填都不报错.
 
  -------------------面试题-----------
 
  functiona(a,b){
 
  alert(a+b);
 
  }
 
  vara=1;
 
  varb=2;
 
  a(a,b)
 
  函数的内置对象arguments
 
  functionadd(a,b){
 
  console.log(a+b);//3
 
  console.log(arguments.length);//2
 
  console.log(arguments);//[1,2]
 
  }
 
  add(1,2)
 
  ------------------arguments的用处1------------------
 
  functionnxAdd(){
 
  varresult=0;
 
  for(varnuminarguments){
 
  result+=arguments[num]
 
  }
 
  alert(result)
 
  }
 
  nxAdd(1,2,3,4,5)
 
  //------------------arguments的用处2------------------
 
  functionf(a,b,c){
 
  if(arguments.length!=3){
 
  thrownewError("functionfcalledwith"+arguments.length+"arguments,butitjustneed3arguments")
 
  }
 
  else{
 
  alert("success!")
 
  }
 
  }
 
  f(1,2,3,4,5)
 
  匿名函数
 
  //匿名函数
 
  varfunc=function(arg){
 
  return"tony";
 
  }
 
  //匿名函数的应用
 
  (function(){
 
  alert("tony");
 
  })()
 
  (function(arg){
 
  console.log(arg);
 
  })('123')
 
  九、BOM对象
 
  BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。
 
  使JavaScript有能力与浏览器“对话”。
 
  1.Window对象
 
  所有浏览器都支持window对象。
 
  概念上讲.一个html文档对应一个window对象.
 
  功能上讲:控制浏览器窗口的.
 
  使用上讲:window对象不需要创建对象,直接使用即可.
 
  window对象的方法
 
  alert()显示带有一段消息和一个确认按钮的警告框。
 
  confirm()显示带有一段消息以及确认按钮和取消按钮的对话框。
 
  prompt()显示可提示用户输入的对话框。
 
  open()打开一个新的浏览器窗口或查找一个已命名的窗口。
 
  close()关闭浏览器窗口。
 
  setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式。
 
  clearInterval()取消由setInterval()设置的timeout。
 
  setTimeout()在指定的毫秒数后调用函数或计算表达式。
 
  clearTimeout()取消由setTimeout()方法设置的timeout。
 
  scrollTo()把内容滚动到指定的坐标。
 
  方法讲解:
 
  //----------alertconfirmprompt----------------------------
 
  //alert('aaa');
 
  /*varresult=confirm("您确定要删除吗?");
 
  alert(result);*/
 
  //prompt参数1:提示信息.参数2:输入框的默认值.返回值是用户输入的内容.
 
  //varresult=prompt("请输入一个数字!","haha");
 
  //alert(result);
 
  方法讲解:
 
  //open方法打开和一个新的窗口并进入指定网址.参数1:网址.
 
  //调用方式1
 
  //open("http://www.baidu.com");
 
  //参数1什么都不填就是打开一个新窗口.参数2.填入新窗口的名字(一般可以不填).参数3:新打开窗口的参数.
 
  open('','','width=200,resizable=no,height=100');//新打开一个宽为200高为100的窗口
 
  //close方法将当前文档窗口关闭.
 
  //close();
 
  setIntervalclearInterval
 
  <inputid="ID1"type="text"onclick="begin()">
 
  <buttononclick="end()">停止</button>
 
  <script>
 
  functionshowTime(){
 
  varnowd2=newDate().toLocaleString();
 
  vartemp=document.getElementById("ID1");
 
  temp.value=nowd2;
 
  }
 
  varclock;
 
  functionbegin(){
 
  if(clock==undefined){
 
  showTime();
 
  clock=setInterval(showTime,1000);
 
  }
 
  }
 
  functionend(){
 
  clearInterval(clock);
 
  }
 
  </script>
 
  setTimeoutclearTimeout
 
  varID=setTimeout(abc,2000);//只调用一次对应函数.
 
  clearTimeout(ID);
 
  functionabc(){
 
  alert('aaa');
 
  }
 
  2.History对象
 
  History对象属性
 
  History对象包含用户(在浏览器窗口中)访问过的URL。
 
  History对象是window对象的一部分,可通过window.history属性对其进行访问。
 
  length返回浏览器历史列表中的URL数量。
 
  History对象方法
 
  back()加载history列表中的前一个URL。
 
  forward()加载history列表中的下一个URL。
 
  go()加载history列表中的某个具体页面。
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title></title>
 
   </head>
 
   <body>
 
   <ahref="html2.html">click</a>
 
   <!--<buttononclick="history.forward()">前进</button>-->
 
   <buttononclick="history.go(1)">前进</button>
 
   </body>
 
  </html>
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title></title>
 
   </head>
 
   <body>
 
   <!--<buttononclick="history.back()">后退</button>-->
 
   <buttononclick="history.go(-1)">后退</button>
 
   </body>
 
  </html>
 
  3.Location对象
 
  Location对象包含有关当前URL的信息。
 
  Location对象是Window对象的一个部分,可通过window.location属性来访问。
 
  Location对象的方法
 
  location.assign(URL)
 
  location.reload()
 
  location.replace(newURL)
 
   <script>
 
   functionf(){
 
  // location.assign("http://www.baidu.com")//跳转至指定页面
 
   location.replace("http://www.baidu.com")//替换当前页面
 
  // location.reload()//刷新
 
   }
 
   </script>
 
  十、DOM对象
 
  1.什么是DOM
 
  DOM是W3C(万维网联盟)的标准。DOM定义了访问HTML和XML文档的标准:
 
  "W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。"
 
  W3CDOM标准被分为3个不同的部分:
 
  核心DOM-针对任何结构化文档的标准模型
 
  XMLDOM-针对XML文档的标准模型
 
  HTMLDOM-针对HTML文档的标准模型
 
  什么是XMLDOM?---->XMLDOM定义了所有XML元素的对象和属性,以及访问它们的方法。
 
  什么是HTMLDOM?---->HTMLDOM定义了所有HTML元素的对象和属性,以及访问它们的方法。
 
  2.DOM节点
 
  根据W3C的HTMLDOM标准,HTML文档中的所有内容都是节点(NODE):
 
  整个文档是一个文档节点(document对象)
 
  每个HTML元素是元素节点(element对象)
 
  HTML元素内的文本是文本节点(text对象)
 
  每个HTML属性是属性节点(attribute对象)
 
  注释是注释节点(comment对象)
 
  画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。
 
  节点(自身)属性:
 
  attributes-节点(元素)的属性节点
 
  nodeType–节点类型
 
  nodeValue–节点值
 
  nodeName–节点名称
 
  innerHTML-节点(元素)的文本值
 
  导航属性:
 
  parentNode-节点(元素)的父节点(推荐)
 
  firstChild–节点下第一个子元素
 
  lastChild–节点下最后一个子元素
 
  childNodes-节点(元素)的子节点
 
  推荐导航属性:
 
  parentElement//父节点标签元素
 
  children//所有子标签
 
  firstElementChild//第一个子标签元素
 
  lastElementChild//最后一个子标签元素
 
  nextElementtSibling//下一个兄弟标签元素
 
  previousElementSibling//上一个兄弟标签元素
 
  节点树中的节点彼此拥有层级关系。
 
  父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
 
  在节点树中,顶端节点被称为根(root)
 
  每个节点都有父节点、除了根(它没有父节点)
 
  一个节点可拥有任意数量的子
 
  同胞是拥有相同父节点的节点
 
  下面的图片展示了节点树的一部分,以及节点之间的关系:
 
  访问HTML元素(节点),访问HTML元素等同于访问节点,我们能够以不同的方式来访问HTML元素:
 
  页面查找:
 
  通过使用getElementById()方法
 
  通过使用getElementsByTagName()方法
 
  通过使用getElementsByClassName()方法
 
  通过使用getElementsByName()方法
 
  局部查找:
 
  <divid="div1">
 
  <divclass="div2">iamdiv2</div>
 
  <divname="yuan">iamdiv2</div>
 
  <divid="div3">iamdiv2</div>
 
  <p>hellop</p>
 
  </div>
 
  <script>
 
  vardiv1=document.getElementById("div1");
 
  ////支持;
 
  //varele=div1.getElementsByTagName("p");
 
  //alert(ele.length);
 
  ////支持
 
  //varele2=div1.getElementsByClassName("div2");
 
  //alert(ele2.length);
 
  ////不支持
 
  //varele3=div1.getElementById("div3");
 
  //alert(ele3.length);
 
  ////不支持
 
  //varele4=div1.getElementsByName("yuan");
 
  //alert(ele4.length)
 
  </script>
 
  3.Event事件
 
  HTML4.0的新特性之一是有能力使HTML事件触发浏览器中的动作(action),比如当用户点击某个HTML元素时启动一段JavaScript。下面是一个属性列表,这些属性可插入HTML标签来定义事件动作。
 
  onclick当用户点击某个对象时调用的事件句柄。
 
  ondblclick当用户双击某个对象时调用的事件句柄。
 
  onfocus元素获得焦点。//练习:输入框
 
  onblur元素失去焦点。应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
 
  onchange域的内容被改变。应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
 
  onkeydown某个键盘按键被按下。应用场景:当用户在最后一个输入框按下回车按键时,表单提交.
 
  onkeypress某个键盘按键被按下并松开。
 
  onkeyup某个键盘按键被松开。
 
  onload一张页面或一幅图像完成加载。
 
  onmousedown鼠标按钮被按下。
 
  onmousemove鼠标被移动。
 
  onmouseout鼠标从某元素移开。
 
  onmouseover鼠标移到某元素之上。
 
  onmouseleave鼠标从元素离开
 
  onselect文本被选中。
 
  onsubmit确认按钮被点击。
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title>Title</title>
 
   </head>
 
   <body>
 
   <inputtype="text"name=""id="aaa"value="请输入内容"onfocus="f1()"onblur="f2()"/>
 
   <script>
 
   varele=document.getElementById("aaa")
 
   functionf1(){
 
   if(ele.value="请输入内容"){
 
   ele.value=""
 
   }
 
   }
 
   functionf2(){
 
  
 
   if(ele.value.trim()==""){
 
   ele.value="请输入内容"
 
   }
 
   }
 
   </script>
 
   </body>
 
  </html>
 
  事件绑定的两种方式
 
  //方式一
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title>Title</title>
 
   </head>
 
   <body>
 
   <buttononclick="f()">click</button>
 
   <script>
 
   functionf(){
 
   alert(123);
 
   }
 
   </script>
 
   </body>
 
  </html>
 
  //方式二(推荐)
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title>Title</title>
 
   </head>
 
   <body>
 
   <buttonid="aaa">click</button>
 
   <script>
 
   varele=document.getElementById("aaa");
 
   ele.onclick=function(){
 
   alert(123);
 
   }
 
   </script>
 
   </body>
 
  </html>
 
  this参数
 
  this传入的是标签对象本身
 
  <divid="abc"onclick="func1(this)">事件绑定方式1</div>
 
  <divid="id123">事件绑定方式2</div>
 
  <script>
 
  functionfunc1(self){
 
  console.log(self.id)
 
  }
 
  //jquery下是$(self),这种方式this参数必须填写;
 
  //------------------------------------------
 
  varele=document.getElementById("id123").onclick=function(){
 
  console.log(this.id);
 
  //jquery下是$(this),这种方式不需要this参数;
 
  }
 
  </script>
 
  onload
 
  onload属性开发中只给body元素加.
 
  这个属性的触发标志着页面内容被加载完成.
 
  应用场景:当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性.
 
  onsubmit
 
  是当表单在提交时触发.该属性也只能给form元素使用.应用场景:在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title></title>
 
   </head>
 
   <body>
 
   <formaction=""id="form1">
 
   <inputtype="text"name="username"/>
 
   <inputtype="submit"value="提交"/>
 
   </form>
 
   <script>
 
   varele=document.getElementById("form1")
 
   ele.onsubmit=function(e){
 
   alert(1234)
 
   //阻止事件发生的两种方式
 
   //returnfalse
 
   //e.preventDefault()
 
   }
 
   </script>
 
   </body>
 
  </html>
 
  Event对象
 
  Event对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
 
  事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.
 
  比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就时KeyCode;
 
  思考:onclick=function(event){};这个方法是谁调用的?
 
  事件传播:
 
  <divid="abc_1"style="border:1pxsolidred;width:300px;height:300px;">
 
  <divid="abc_2"style="border:1pxsolidred;width:200px;height:200px;">
 
  </div>
 
  </div>
 
  <scripttype="text/javascript">
 
  document.getElementById("abc_1").onclick=function(){
 
  alert('111');
 
  }
 
  document.getElementById("abc_2").onclick=function(event){
 
  alert('222');
 
  event.stopPropagation();//阻止事件向外层div传播.
 
  }
 
  </script>
 
  4.DOM节点的增删改查
 
  增
 
  createElement(name)创建元素
 
  appendChild();将元素添加
 
  删
 
  获得要删除的元素
 
  获得它的父元素
 
  使用removeChild()方法删除
 
  改
 
  第一种方式:
 
  使用上面增和删结合完成修改
 
  第二中方式:
 
  使用setAttribute();方法修改属性
 
  使用innerHTML属性修改元素的内容
 
  查
 
  使用之前介绍的方法.
 
  <!DOCTYPEhtml>
 
  <html>
 
   <head>
 
   <metacharset="UTF-8">
 
   <title>Title</title>
 
   <styletype="text/css">
 
   .div1,.div2,.div3,.div4{
 
   width:300px;
 
   height:100px;
 
   }
 
   .div1{
 
   background-color:green;
 
   }
 
   .div2{
 
   background-color:yellow;
 
   }
 
   .div3{
 
   background-color:darkblue;
 
   }
 
   .div4{
 
   background-color:deeppink;
 
   }
 
   </style>
 
   </head>
 
   <body>
 
   <divclass="div1">hellodiv1
 
   <buttononclick="add()">add</button>
 
   </div>
 
   <divclass="div2">hellodiv2
 
   <buttononclick="del()">del</button>
 
   </div>
 
   <divclass="div3">hellodiv3
 
   <buttononclick="change()">change</button>
 
   </div>
 
   <divclass="div4">hellodiv4</div>
 
  
 
   <scripttype="text/javascript">
 
   functionadd(){
 
   varele=document.createElement("p");//<p></p>
 
   ele.innerHTML="hellop";
 
   varfather=document.getElementsByClassName("div1")[0];
 
   father.appendChild(ele);//增
 
   }
 
   functiondel(){
 
   varfather=document.getElementsByClassName("div1")[0];
 
   varson=father.getElementsByTagName("p")[0];
 
   father.removeChild(son);//删
 
   }
 
   functionchange(){
 
   varimg=document.createElement("img");//<imgsrc=""/>
 
   img.src="img/abcd.jpg";
 
  // img.setAttribute("src","img/abcd.jpg")
 
   varele=document.getElementsByTagName("p")[0];
 
   varfather=document.getElementsByClassName("div1")[0];
 
   father.replaceChild(img,ele);//改
 
   }
 
   </script>
 
   </body>
 
  </html>
 
  修改HTML
 
  改变HTML内容
 
  改变元素内容的最简答的方法是使用innerHTML,innerText。
 
  改变CSS样式
 
  <pid="p2">Helloworld!</p>
 
  document.getElementById("p2").style.color="blue";
 
  改变HTML属性
 
  elementNode.setAttribute(name,value)
 
  elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)
 
  创建新的HTML元素
 
  createElement(name)
 
  删除已有的HTML元素
 
  elementNode.removeChild(node)
 
  关于class的操作
 
  elementNode.className
 
  elementNode.classList.add
 
  elementNode.classList.remove

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56628.shtml