JS 基础知识之传智播客1

一、Javascript概述(知道)
	a.一种基于对象和事件驱动的脚本语言
	b.作用: 给页面添加动态效果
	c.历史: 原名叫做livescript.W3c组织开发的标准叫ECMAscipt.
	d.特点:
		  1). 弱势语言
		  2). 由浏览器直接解析执行。(函数不能直接执行)
		  3). 是一个解释性语言
	      4). 交互性(它可以做的就是信息的动态交互)
	      5). 安全性(不允许直接访问本地硬盘)
	      6). 跨平台性(只要是可以解释Js的浏览器都可以执行,和平台无关
	e . javascript和java的一些区别:
		  1). javascript是一个解释性语言,java是编译解释性语言
	      2). javascript是一个弱势语言,Java是一个强势语言
	      3). 在页面上引入的方式不同javascript代表用<script>引入,Java代码<%>
	      4). JS是基于对象,Java是面向对象。

二、JavaScript语言组成(了解)
     EcMAScript  + BOM + DOM 
		ECMAScript: 规定了一些语法,变量,for循环等等结构
	    BOM: Browser  object  Model 浏览器对象模型  window 对象==java中的object
	    DOM: Document  object  Model 文档对象模型  树模型,所有的东西都是节点(文本节点,属性节点标签节点),不是父子就是兄弟
		除了html,它没有父亲,却有俩个孩子,head 和body,
		
三、JavaScript与Html的结合方式(必须掌握)--浏览器解析一般是从上到下解析,一般放在最后,我个人认为  
	Javascript与HTML的结合方式有三种:
		1.采用事件来调用,代码写在字符串中
			<button onclick = "alert('大家好')">点击</button>
			 <p onclick="alert('nihao')">大家好!</p>  点击p上的文字弹出对话框
		2.采用定义函数的方式: 用function来定义函数  ,函数不能直接执行,必须被调用
			function fun(){ alert('你好')} ;
		3.采用外部js文件.
			利用<script src = "a.js"></script>引入,文件名字随意,可以把js改成a.abvfdf;照样可以执行
			
		2.2
<body>
    <p onclick="alert('nihao')" id="pid">大家好!</p>
</body>
<script>
    var pid =document.getElementById("pid");
    alert(pid.onclick);//弹出的是 funciton onclick(event){alert('nihao')}
</script>

四、JavaScript基本语法(掌握)
		变量本身没有类型
	* 定义变量:采用var关键字来定义.定义的变量的类型是由给定的值来决定的。
	* 基本数据类型: undifined,表示未定义类型。
				 Number类型。代表了一切数字类型
				 String类型。字符串类型
				 Boolean类型。布尔类型
				 Function类型。函数类型
				 Null类型。	  
	* 基本数据类型: object :对象类型.
    * 判断变量的类型 : 
		    1. 采用typeof函数判断 :typeof(a) == "string"  类似toString(),打印所有类型的小写;
		    2. 采用instanceof运算符: a instanceof String 判断变量是否由new出来的
				var a;  undefined 没有给变量赋值的时候
				a=10;   numberic
				a="abc" String
				a=function(){alert("aaadfd")}  Function
				a=null; Null
				
				a=10;
				a instanceof Number;//false   typeof(a)=="number" //true; == 后面是小写的变量
				a= new Number(10); //true; 因为是new出来的所以true  typeof(a)=="number" //false

	与java不一样的语法:
		var a =10; 或 a=10; var 可写可不写
		
	js的运算符
	
	input标签中的value的值就是标签中出现的内容,也是传给服务器的值
	文本框变长:size:50; 50个字符
	readonly只读:光标可以点进文本框,但是update不了
	disable:光标不可以点进文本框
	
	type:hidden 隐藏框,目的给程序员往服务器发送数据用!不能看不能写
	type:radio 单选框必须要给name属性,因为浏览器默认给name相同的作为一组,默认选中checked	 
	
	* 三大结构
		a.顺序结构
		b.选择结构
		c.循环结构 for,while,do...while

    * 运算符
		1.一元运算符 +(正号) -  ++ -- 
		2.二元运算符 +(加法) - * / %
		3.三元运算符 ? :
		4.等号  == 判断的是内容,
				=== 全等于 ,判断类型和内容

    * 类型的转换
		1. Number转String : 3 + ""
		2. Number转Boolean :牢记:在javascript中,类似C语言,非0为真,0为假,数字0为假,但字符串“0”为真,
							 如果变量为null或者undefined或者NaN,也为假. 在java中,字符串转换不了boolean
		3. String转Number:
				var a ='10';
				1.a. parseInt,parseFloat
				2. 乘以1即可(推荐) a=a*1; alert(typeof(a))
		4.案例
age:<input type="text" id="age" name="">
<input type="button" value="alertage" onclick="fun()">

        function fun(){
            var txt = document.getElementById("age").value;//value不能忘了
            if(txt==100){//双等于不能忘了,双等可以直接等于number或string
                alert("age等于100")
            }else{
                alert("age不等于100")
            }
        }

五、JavaScript 函数的定义(掌握) //js 中函数的调用 直接写函数名即可,java通过对象调用
	* 函数的定义有三种方式: 
		1.采用function关键字来定义  funciton fun(){alert("hellojs")}; fun();
		2.采用匿名的方式来定义 var a = funciton (){alert("hellojs")}; a(); 函数赋值给变量
		3.采用new Function()的方式(了解,不推荐)
		    var b = new Function("X","Y","Z","alert(X+Y+Z)");//最后一个是函数体,其他是形参
			b(1,2,3,4,5);//1+2+3=6;多个参数支取前面三个
			b(1,2);//NaN

	* 函数的调用:
		1.函数调用的时候参数可以传递多个,可以和函数定义的形参个数不符合
		2.如果函数重名了,那么调用的时候一定是调用最后一个,与参数无关。
		function fun1(){alert("1")};
		function fun1(x){alert("2")};
		function fun1(x,y){alert("3")};
		fun1() fun1(1) fun1(2,3) fun1(2,4,5)//统统调用的是最后一个弹窗是3
	*** 推荐: 定义函数的千万不要重名。同名就要闭包

	函数劫持: document 网页对象  alert 是window对象
			改变js函数预定义的功能.
			window.alert=funciton(x){document.write(x)}
			alert("abc");
			结果是,弹框没有了,变成了在网页中打印了abc,为什么?
			alert("abc");变成了调用上面的方法,而上面的方法就是在页面中输出数据
				
六、JavaScript 全局函数(掌握)
	全局函数:
		1.isNaN (掌握):用来判断变量是否是数字类型的字符串
			NaN: not a Number ,不是数字,是一个函数
			    var a ="100";//内容是数字
				if(isNaN(a)) alert("a不是数字");//判断的是内容是不是数字 
				else alert("a是数字");//打印此行
		2.parseInt,parseFloat
		3.eval(掌握): 
		   a:主要执行字符串,把结果转换成数字
			 alert("3+10");//3+10
			 alert("3"+"2");//32
			 alert(eval("3+10"));//13
			 alert(eval("3+10")+eval("2"));//15
			
			b:将json格式的字符串转换成json, json本质就是一个map
			 {"a":"china","b":"us"} --for each通过key拿value
		
		4.escape(): 编码,中文往服务器端传数据,网络传递数据时
			    var b ="中国";
				var c =escape(b);//c=%u4E2D%u56FD
				alert(c);
				alert(unescape(c))//中国
		5.unescape(): 解码
		6.encodeURI(): 对网址(URL)进行编码
		7.decodeURI(): 对网址(URL)进行解码
			    var e ="http://www.sohu.com?a=中国&b=美国";
				var f = encodeURI(e);//
				alert(f);
				alert(decodeURI(f))//http://www.sohu.com?a=中国&b=美国
					
七、JavaScript常用对象介绍(掌握)
	* Array对象 数组对象,进行数组操作
		定义方式
			1.采用new Array()的方式 
				var arr = new Array();初始长度为0;
				var arr1 = new Array(10);初始长度为10;Z只写一个是定义长度,多个是初始化
				初始化:
				arr1[0]=1; arr1[1]=10;//如果alert[5];undefined,没有限定类型,java中0 0.0 false等有默认值
				var arr2 = new Array(1,2,3,4,5,);//java需要在后面加{}来初始化 
			
			2.采用中括号[]来定义(推荐使用)
				数组的长度可以随时改变
				var arr3=[];//定义了一个空数组
				var arr3=[3,"33",flase,"abc",4,8];//定义一个数组且初始化,不推荐放不同类型
			3.如何改变数组的长度
				var arr4 =[1,2,3,4,5];
				增加长度到100;
				第一种: arr4[99]=123; 数组的长度变成100;
				第二种: arr4.length=100;  其他所有的未定义类型都是undefined
				缩减数组长度到2;
				arr4.length=2;
				此刻 arr4[3],//undefined
			4.数组引用方式 用下标或
				var arr5 = ["china","usa","小日本"];
					arr5["china"]=["北京","上海","天津"];
					alert(arr5["china"][0]);//模拟二维数组, 打印出 北京
			5.数组的类型
				alert(typeof(arr5));//object
				
				
		特点: 
			1.javascript中数组的大小可以随时改变,如同java中的集合(如List)
			2.javascript中数组的下标可以是任意对象。

		方法: 数组对象预定义好的方法
			1.join() : 把数组的所有元素放入一个字符串. 默认用逗号连接
				    var arr=["北京","上海","天津"];
					alert(arr.join());//北京,上海,天津 默认是逗号隔开
					alert(arr.join(""));//北京上海天津
			2.push() : 向数组的末尾添加一个元素
					    arr.push("韩国");//4
						alert(arr.join("*"));//北京*上海*天津*韩国
			4.reverse() :反转
				    var arr=["北京","上海","天津"];
					alert(arr.reverse());//天津,上海,北京
				
			3.shift() : 删除并返回数组的第一个元素
					    var arr=["北京","上海","天津"];
						alert(arr.shift());//北京
						alert(arr);//上海,天津
			4.sort() ; 排序 .默认同类型的数据相比较.
						默认将能转换成number类型的字符串和number类型放在一起比较
						先转换成toString,转换不成的作为一组来比较
						var arr1=[3,8,"23","34",123];
						alert(arr1.sort());//123 23 3 34 8 不符合要求
						
						改写:给sort方法添加一个形参比较器
						arr1.sort(funciton(a,b){
							if(a*1>b*1){ //将字符串转换成number类型
								return 1;//降序 从大到小
							}else {
								return -1;//升序 从小到大
							}
						});
						
				
案列:标题栏跑马灯特效
<body onload="init()">//初始化
    <script>
        function init(){
            //1.获取标题栏的内容
            var title = document.title;
           //2.将字符串转换成对应的数组
            var arr = title.split("");//以空字符串分割
           //  3.将数组的第一个字符拿到并删除
            var first = arr.shift();
            //4.将一个字符放置到数组的末尾
            arr.push(first);
            title=arr.join("");//将数据组合成一个字符串
            //5.把新的字符串设置成新的标题
            document.title=title;
            //6.定时重复上面步骤
            setTimeout("init()",200);//每隔0.2s执行init(),即重复上面5个步骤;
        }
    </script>
</body>
			
	* String对象 ----- 字符串类型的引用类型
		String对象: 
			1.方式:	substr: 截取字符串 两个参数第一个是下标,第二个是长度
					substring: 截取字符串 两个参数第一个是下标,第二个是下标
					toUppercase:
					toLowercase:
					indexOf:
					charAt() :
					replace():
					anchor();创建html的锚点
					substr(index,length);//截取字符串
					substring(index,index);//截取字符串 两个下标
		   1.1案例:让p标签的内容变大 注意:innerHTML只能用于有开始和结束标签的标签对象,如input img等拿不到数据
			function changeBig() {
				var p = document.getElementById("p");//拿到p标签的对象
				var txt = p.innerHTML;//拿到p标签对象的主体内容html代码,即 大 这个字符串
				//txt=txt.big();居然变大不了!!!
				p.innerHTML=txt.big();//改变字符串的内容再赋值到p标签的主体内容上
			}
			</script>
			<p id="p">大</p>
			<input id="btn" type="button" value="变大" name="" onclick="changeBig()">
		
			2.
			innerHTML与innerText的区别?
			<h1 id="h1"><font>你好</font></h1>
			innerHTML:<font>你好</font>
			innerText:你好
			
			2.1案例 给字体自动变换颜色
	<script>
        function changeColor() {
            var arr=["red","green","blue","yellow","black"];
            var p = document.getElementById("p");//拿到p标签的对象
            var txt = p.innerText;//拿到p标签对象的文本,即 大小多少
            var index = Math.floor(Math.random()*arr.length);//Math.random()*arr.length 0-5之间的double,向下取整,0-4
            p.innerHTML=txt.fontcolor(arr[index]);//改变字体的内容再赋值回去
          //p.innerText=txt.fontcolor(arr[index]);??点击三下是这样<font color="red"><font color="yellow"><font color="black">大小多少</font></font></font>
            setTimeout("changeColor()",500);
        }
    </script>
    <p id="p">大小多少</p>
    <input id="btn" type="button" value="变大" name="" onclick="changeColor()">
			
	
	
	* Number对象 ---- 数字原始类型引用类型
			Num对象:
					1. random() : 获得随机数[0,1)
					2. ceil() : 返回大于等于次数的最大整数
					3. floor() : 返回小于等于次数的最大整数
					4. round(): 返回四舍五入后的整数
	
	* Boolean对象 ---- 布尔原始类型引用类型 
	* Math对象 执行数学任务
				ceil(x) 拿到大于等于x的整数 Math.ceil(3.1)//4
				floor(x) 拿到小于等于x的整数Math.floor(3.6)//3
				round(x) x的四舍五入        Math.round(3.5)//4
				random()//[0,1)  random(x) //[0,x)
	
	* Date对象 用于处理日期和时间
		Date对象: 代表一个时间
				方法: getXXX() : 拿到年月日
				var d = new Date();//拿到当前的时间  
				var dLocal = d.toLocalString();//拿到本地的环境的时间
				var year= d.getYear();或 d.getFullYear();
				var month = d.getMonth()+1;//月
				var day = d.getDate();//日
				var week = getDay();//数字 表示星期几
				
	* RegExp 对象正则表达式对象 
		正则表达式
			写法: 1. new的方式   var r = new RegExp("ab") ;
			       2. 采用/正则表达式/ (推荐)  var r = /ab/ ;
				   
				   var reg =/.../;//点表示任意字符 ,即表示三个任意字符
				   var s= "abcde";
				   var  b = reg.test(s);//s字符串是否包含正则表达式的reg,结果为true
				   var str = reg.exec(s);//以数组的形式返回匹配正则表达式的字符串, str=[abc]
				   
				   var reg =/(..)./;()表示子匹配,对结果进行匹配
				   reg.exec(s)[0]+"***"+reg.exec(s)[1];//先匹配三个点 abc; 再对abc中的两个点匹配,ab;
														//所以结果就是: abc***ab
			常用的匹配:
			  1.身份证号码的匹配: var reg = /^(\d{14}|\d{17})(\d|[xX])$/; 
			  2.单词首字母大写:   var reg = /\b(\w)|\s(\w)/g; 
			  3.验证日期 YYYY-MM-DD:  var reg = /^\d{4}-\d{1,2}-\d{1,2}$/; 
						 yyyy/mm/dd : var reg:/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/;
			  
			  4.去掉文件后缀名: var reg = /\.\w+$/; 
			  
			  5.验证邮箱: var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
			  
			  6.匹配手机号码为135打头: var reg = /^(135)(\d{8})$/; 
				匹配手机号码:        : var reg=/^1[3,5,8,6](\d{9})$/;
				匹配13或15打头的手机号码: var reg = /^0*(13|15)\d{9}$/;
				匹配电话号码: var reg= /^\d{3,4}-\d{7,8}(-\d{3,4})?$/; 0563-5380513-001;区号-号码-分机号
			  
			  7.文本框只能输入数字和小数点:var reg = /^\d*\.?\d{0,2}$/;
			  8.判断字符串是否全由数字组成:var reg = /^\d*$/; 
			  9.删除字符串两侧的空格:function trim(str){ return str.replace(/^\s+|\s+$/g,''); }
			  10.统一字符中的空格数:例: 蓝  色  理      想;--->蓝色理想
					funciton replaceSpace(str){
								var reg=/\s+/g;
								str=srt.replace(reg,"");
								return str;
							}

  

posted @ 2016-05-16 00:46  黑土白云  阅读(182)  评论(0编辑  收藏  举报