JavaScript基础知识

JavaScript

1、概念

js:javascript
概念:	一种基于对象和事件驱动的客户端脚本语言
详细:	基于对象:js中所有的内容都是对象 js的开发依赖于浏览器中所有内置对象。
	  事件:在页面执行的所有操作:如 点击按钮,鼠标悬停,输入文本。
	  事件驱动:当客户在页面执行某个操作,次操作对应的事件就会被触发,此事件注册的js代码就会执行页面客户的操作 驱动 关联js代码的执行。
	  客户端:js代码嵌套在html中 js代码可以被浏览器中的内置的js引擎 解析并运行。
	  脚本语言:嵌套在页面中 实现页面动态效果的编程类语言。
特点:	1,基于对象
	  2,简单性(弱类型语言,语法太严格)
	  3,跨平台(js代码可以在任意操作系统上运行)
	  4.安全性(不允许访问硬盘)
	  5.动态性(通过js代码实现页面的动态效果(页面样式和数据发生变化))
前端三剑客:HTML+CSS+JS
 	  html:提供标签,封装数据
 	  css:提供属性,控制数据的样式
 	  js:通过编程逻辑,来实现页面的动态效果

2、javascript和java的区别

java:一种实现后台业务逻辑的面向对象的高级编程语言
js:一种基于对象和事件驱动的客户端脚本语言
相同之处:都是编程语言
不同之处;1:js是基于对象
		   java是面向对象(编程思想)
		 2:js是弱类型语言
		 	java是强类型语言(定义变量时 必须先指定类型 变量一旦定义 类型不能更改 而且只能存储对应类型的数据)
		 3:js实现页面动态效果
		 	java实现后台业务逻辑
		 4:js是解释型语言:js被浏览器中内置的js引擎 解释后就可以运行
		 	java是编译型语言:java代码必须被编译器编译成为字节文件码后,字节码文件才能被jvm运行
		 5:js是NetScape(网境)公司的产品
		 	java是sun公司的产品 是oracle收购

3、编程类语言的组成

  • 标识符:名字
  • 关键字:被赋予特殊含义的单词或者字符
  • 数据类型:数据类型(数字,字符,布尔,字节,对象)
  • 运算符:进行数学运算的符号(算数,逻辑,赋值,比较,位,三元)
  • 变量和常量:只可以更改的是变量,值不可以更改的是常量
  • 数组:容器 接受多个数据
  • 方法:指定功能代码块的封装——代码复用
  • 注释:对代码的解释说明
  • 语句:一段完整的计算机指令
  • 对象和类:对一类实物的描述/类的实例

4 、js和html整合的方式

<html> <!--html是根标签:所有标签都是其子标签-->
     <head><!--头标签:对当前html文件进行统一的属性设置-->
	        <title>js_01语法</title>
			<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
	 </head>
	 <!--js和html整合方式1:script标签中的就是js代码
	     script标签可以写在任意位置
	 -->
	 <script  type="text/javascript"> 
	      function test01(){
		       alert("点我干啥!!1");/*弹出一个提示框*/
		  }
	 </script>
	  <!--js和html整合方式2:通过script标签的src属性来引入外部js文件
	     script标签设置了src属性 此 script中不能再写js代码
	 -->
	 <script  type="text/javascript" src="01.js">
	       alert("点我干啥!!3");/*此代码不会执行*/
	 </script>
	 <body>
	       <!--onclick="test01();"   当前按钮被点击 触发onclick事件 对应的方法test01就会执行-->
           <input   type="button" value="点我测试1"  onclick="test01();"/><br/>
		   <input   type="button" value="点我测试2"  onclick="test02();"/><br/>
	 </body>
<html>
  • 01.js
function test02(){
		alert("点我干啥!!2");/*弹出一个提示框*/
}

5 、js语法(只关注与java的不同之处)

5.1 、数据类型

 <input   type="button" value="点我测试3数据类型"  onclick="test03();"/><br/>
 <script  type="text/javascript"> 
     function test03(){
         /*方法2:typeof()*/
         var i;//定义一个变量 变量名为i 默认值是undefined
         alert(1+":::"+(typeof(1)));//number
         alert(1.1+":::"+(typeof(1.1)));//number
         alert("abc"+":::"+(typeof("abc")));//string
         alert('a'+":::"+(typeof('a')));//string
         alert(true+":::"+(typeof(true)));//boolean
         alert(new Object()+":::"+(typeof(new Object())));//object
         alert([1,2,3]+":::"+(typeof([1,2,3,4])));//object
         alert(i+":::"+(typeof(i)));//undefined
     }
</script>
  • 注意事项
1 js中数字类型 没有整数和浮点之分
2 js中字符串和字符都是string ,换句话说双引号/单引号 都表示字符串
3 js中当一个变量 没有赋值 默认赋值常量值undefined(表示变量没有赋值)

5.2、 常量和变量

  • 常量
<input   type="button" value="点我测试4 常量"  onclick="test04();"/><br/>
<script  type="text/javascript"> 
function test04(){
        /*方法3:document.write();  把参数数据以html代码解析后在页面现实*/
        document.write("<font  color='red' size='4'>font标签</font><br/>");
        var j;
        document.write("<font  color='red' size='4'>j="+j+" ::undefined:表示当前变量没有赋值</font><br/>");
        var k=null;
        document.write("<font  color='red' size='4'>k="+k+" ::null:表示变量没有指向任何对象</font><br/>");
        var h=5/"a";
        document.write("<font  color='red' size='4'>h="+h+" ::NaN: 表示当前数据没法得到一个数字</font><br/>");
        var g="";
        document.write("<font  color='red' size='4'>g="+g+" :: 空字符串对象</font><br/>");
}
</script>
  • 变量
<input   type="button" value="点我测试5 变量"  onclick="test05();"/><br/>
<script  type="text/javascript"> 
        var g=1,k=2;
</script>
<script  type="text/javascript"> 
var h=1,r=2;//全局变量
function test05(){
    //注意1:js中变量的类型可以更改  js是弱类型语言
    var i;//定义变量用var
    i=1;//变量赋值
    document.write("<font  color='red' size='4'>i="+i+"</font><br/>");
    i="abc";
    document.write("<font  color='red' size='4'>i="+i+"</font><br/>");
    i=true;
    document.write("<font  color='red' size='4'>i="+i+"</font><br/>");

    //注意2:js中变量可以定义多次
    var i=12;
    document.write("<font  color='red' size='4'>i="+i+"</font><br/>");

    //注意3:变量定义可以省略  直接赋值就能使用
    ii=1;
    document.write("<font  color='red' size='4'>ii="+ii+"</font><br/>");

    //注意4:整个script标签是相通的
    document.write("<font  color='red' size='4'>g="+g+",k="+k+"</font><br/>");

    //注意5:js中变量分成两种:
    //       全局变量:在方法外定义的变量::作用域:整个页面
    //       局部变量:在方法中定义的变量(参数列表+方法体)::作用域:当前方法
    var h=11;//局部变量
    document.write("局部变量:h="+h+"<br/>");
    document.write("全局变量:this.h="+this.h+"<br/>");
}
</script>

5.3、 运算符

image

<input   type="button" value="点我测试6 运算符"  onclick="test06();"/><br/>
<script  type="text/javascript"> 
function test06(){
        //1:算术运算符:+ - * / % ++ --
        //++混合运算:++在前   先自增 拿自增后的值参加本次运算
        //            ++在后   先拿当前值参加本次运算 然后再自增
        //n%m= n除以m得到一个整数 除不尽的那部分就是余数
        //java中:运算后结果的数据类型取决于精度最高的数据
        document.write("1/2="+(1/2)+"<br/>");//0.5

        //+:加法运算、正负的正、字符串拼接
        document.write("1+\"2\"="+(1+"2")+"<br/>");//"12"
        document.write("1-\"2\"="+(1-"2")+"<br/>");//"-1"   字符串无法进行减乘除运算  
        //会自动把数字类型的字符串转换为数字
        document.write("\"1\"*\"2\"="+("1"*"2")+"<br/>");//"2"
        //方法4:parseInt()把参数字符串转换为整数:parseFloat()把参数字符串转换为浮点数字
        document.write("1+\"2\"="+(1+parseInt("2"))+"<br/>");//3
        document.write("1+\"2.1\"="+(1+parseFloat("2.1"))+"<br/>");//3.1
        document.write("1+\"abc\"="+(1+parseFloat("abc"))+"<br/>");//NaN
        //NaN:结果不是一个数字
        //NaN比较不能用==  使用方法isNaN()
        document.write((parseFloat("abc")==parseFloat("abc"))+"<br/>");//false
        document.write((parseFloat("abc")==NaN)+"<br/>");//false
        document.write(isNaN(parseFloat("abc"))+"<br/>");//true

        //2 比较运算符:> >= < <= != == 

        //3 赋值运算符:= += -= *= /= %=
        //4 逻辑运算符: &&  ||  !
        //5 位运算符: &  |  ^  >>>  <<<
        document.write((13|4)+"<br/>");//1101  100
        //6 三元运算符:
}				 
</script>

5.4、 流程控制

<input   type="button" value="点我测试7 流程控制"  onclick="test07();"/><br/>
<script  type="text/javascript"> 
function test07(){
        //1 顺序结构:没有关键字时 默认流程:从上到下 从左到右
        //2 选择结构:if-else  switch
        //注意:js中所有数据都可以作为boolean值使用
        //   5种特殊情况是false:::NaN、undefined、0、""、null
        //    其他所有数据都是true					 
        if(!0){
            document.write("!0是true<br/>");//true 
        }
        if(!""){
            document.write("!\"\"是true<br/>");//true 
        }
        if(!null){
            document.write("!null是true<br/>");//true 
        }
        if(!NaN){
            document.write("!NaN是true<br/>");//true 
        }
        if(!undefined){
            document.write("!undefined是true<br/>");//true 
        }
        if(" "){
            document.write("\" \"是true<br/>");//true 
        }
        if(-1){
            document.write("-1是true<br/>");//true 
        }
        if(new Object()){
            document.write("new Object()是true<br/>");//true 
        }
        if([]){
            document.write("[]是true<br/>");//true 
        }
        //3 循环结构:for while  dowhile
        //4 跳准:break continue
}
</script>

5.5、方法

<input   type="button" value="点我测试1  方法"  onclick="test01();"/><br/>
<script  type="text/javascript"> 
                 /*
				    js中方法的特点:
					    1  格式不同:
					      java方法格式: 修饰符 返回值类型 方法名(参数列表){
						                        实现方法具体功能的代码
												return 返回值;
						                 }
				          js方法格式:   function 方法名(参数列表){
						                        实现方法具体功能的代码
												return 返回值;
						                 }

				        2  变量的分类:
					      方法中定义的变量是:局部变量  作用域是当前方法
						  方法外定义的变量是:全局变量 作用域是整个页面

                        3  js方法实参的个数可以和形参的个数不同
                           js方法中默认有一个数组 名字为arguments 来接受所有的实参	

						4 js中方法也是对象:
                            var test012=test011;//给test011指向的方法 又起个名字叫test012						

                    实参和形参:实参--方法调用时传递的参数具体值
					            形参--方法定义时的参数列表变量

				   */
function test01(){//定义方法
        var sum= test011(1,2,3,6,8,9); //调用方法

        //sum= test011(1); //调用方法
        //alert("sum="+sum);//NaN

        var test012=test011;//给test011指向的方法 又起个名字叫test012
        //alert(test012);
        test012(1,4);
}
function test011(a,b){//定义方法
    //alert("a="+a+",b="+b);
    //js方法中默认有一个数组 名字为arguments 来接受所有的实参	
    document.write("arguments="+arguments+"<br/>");
    for(var i=0;i<arguments.length;i++){
        document.write("arguments["+i+"]="+arguments[i]+"<br/>");
    }
    return a+b;						  
}
</script>

6、Array数组对象

/*
		     js中数组与java不同之处
			 1:js中创建数组有两种方式:通过[] 和 通过Array的构造方法
			 2:js数组不存在下标越界异常
			 3:js中数组元素个数可以更改 不存在下标越界异常
			    数组元素的默认值是undefined
			 4: js中数组元素类型可以不同

			 js数组中的方法:
			 1 array1.concat([item1...]) ;获取一个新的数组 新数组由array1和参数元素组成
			 2 array1.join(separator); 获取一个字符串:由元素和参数分隔符组成
			 3 arrayObj.pop( );移除数组中的最后一个元素并返回该元素。
               arrayObj.shift( );移除数组中的第一个元素并返回该元素。
             4 arrayObj.push(item1...);将新元素添加到一个数组中,并返回数组的新长度值。
             5 arrayObj.reverse( );反转
			 6 arrayobj.sort(sortfunction) :排序
 */
var arr=[1,5,8,9,0];//创建数组方式1 通过[]
document.write("arr="+arr+"<br/>");
arr=new Array();// 创建数组方式2 通过Array的构造方法:Array()没有元素的数组
document.write("arr="+arr+"<br/>");
arr=new Array(5);//创建数组方式2 通过Array的构造方法:Array(5)含有5个元素的数组
document.write("arr="+arr+"<br/>");
arr=new Array(5,12,3,4);//创建数组方式2 通过Array的构造方法:Array(元素1,元素2,...)含有指定个元素的数组
document.write("arr="+arr+"<br/>");
document.write("arr[0]="+arr[0]+"<br/>");
document.write("arr[4]="+arr[4]+"<br/>");//arr[4]=undefined
document.write("arr[-4]="+arr[-4]+"<br/>");//arr[4]=undefined
arr[5]=6;
//arr=5,12,3,4,,6 length=6
document.write("arr[4]="+arr[4]+"<br/>");//arr[4]=undefined
document.write("arr="+arr+" length="+arr.length+"<br/>");

arr=[1,5,8,true,"abc"];
document.write("arr="+arr+"<br/>");//arr=1,5,8,true,abc


/*js数组中的方法*/
var arr1=[1,4,5];
var arr2=arr1.concat(6,8,9,0);//获取一个新的数组:由arr1和参数元素组成
document.write("arr1="+arr1+"<br/>");
document.write("arr2="+arr2+"<br/>");
document.write("arr2.join(\"-\")="+arr2.join("-")+"<br/>");
document.write("arr2.push(1,4)="+arr2.push(1,4)+",arr2="+arr2+"<br/>");
document.write("arr2.reverse()="+arr2.reverse()+"<br/>");
arr2.sort();
document.write("arr2="+arr2+"<br/>");//arr2=0,1,1,4,4,5,6,8,9

arr2=["abc","ac123","ac45","a","c","1234","1"];
arr2.sort();
document.write("arr2="+arr2+"<br/>");


//先按长度排序 再按编码标排序
arr2.sort(biJiao);
document.write("arr2="+arr2+"<br/>");

function biJiao(a,b){
    if(a.length!=b.length){
        return a.length-b.length;
    }
    //String对象的方法:int charCodeAt(index);获取参数下标出字符对应的编码标中整数
    for(var i=0;i<a.length;i++){
        if(a.charCodeAt(i)!=b.charCodeAt(i)){
            return a.charCodeAt(i)-b.charCodeAt(i);
        }
    }
    return 0;
}

7、Date日期对象

/*
		    Date日期对象:js的Date和java的Date基本一样
		    构造方法:Date();获取当前时间对应的日期对象
			          Date(time);获取参数毫秒值对应的日期对象
					  Date(year,month,day[,hour,minute,second]);获取参数时间参数对应的日期对象
					        注意:年是完整的年  月是0-11
		    普通方法:
			        1 获取和设置时间参数:
				       int   getXxx(); 获取时间参数
					   void  setXxx(int xxx);设置时间参数
					2  日期和毫秒值 之间的转换
                       long  getTime():获取当前时间对象对应的毫秒值
                       void setTime(long  time): 设置当前日期对象对应的时间为参数毫秒值的时间

                    3  String  toLocaleString() :获取当前操作系统设置的日期格式的字符串					   
		  */
function testDate(){
    var  date=new Date();
    document.write("new Date()="+date+"<br/>");//new Date()=Thu Sep 16 2021 14:22:28 GMT+0800 (中国标准时间)
    document.write("new Date().toLocaleString()="+date.toLocaleString()+"<br/>");
    date=new Date(1);//毫秒值是相当于历元:1970-1-1 0:0:0
    document.write("new Date().toLocaleString()="+date.toLocaleString()+"<br/>");
    date=new Date(2021,9-1,16,14,25,21);//month从0-11
    document.write("new Date().toLocaleString()="+date.toLocaleString()+"<br/>");

    //日期和毫秒值之间的转换
    document.write("date.getTime()="+date.getTime()+"<br/>");
    date.setTime(0);
    document.write("date.toLocaleString()="+date.toLocaleString()+"<br/>");

    //设置时间参数
    date.setYear(2021);
    date.setMonth(9-1);
    date.setDate(16);
    date.setHours(14);
    date.setMinutes(31);
    date.setSeconds(24);
    document.write("date.toLocaleString()==="+date.toLocaleString()+"<br/>");
    myDate2Str(new Date());//121-9-16 星期4 14:36:41


}
function myDate2Str(date){
    var weeks="日一二三四五六";
    //获取时间参数
    var year=date.getYear()+1900;
    year=date.getFullYear();
    var month=date.getMonth()+1;
    var day=date.getDate();
    var week=date.getDay();
    var hour=date.getHours();
    var minute=date.getMinutes();
    var second=date.getSeconds();
    document.write(year+"-"+month+"-"+day+"  星期"+(weeks.charAt(week))+" "+hour+":"+minute+":"+second+"<br/>");
}
testDate();

8、Math数学运算

/*
		     Math:数学运算相关的方法:没有构造方法 固有对象(成员都是静态的)
			 属性:PI  E
			 方法:1 取近似值
						int floor(double n);获取小于等于n的最大整数
						int ceil(double n);获取大于等于n的最小整数
						int round(double n);四舍五入
				   2 绝对值
				        double  abs(double n)
				   3 随机:[0,1)
                        double  random();
                   4 幂运算
                        double sqrt(double n);n开方
                        double pow(a,b);求a的b次方
					5 获取最大值最小值
                        double  min(a,b,c...);	
                        double  max(a,b,c...);							
*/
function testMath(){
    for(var n=1;n<=5;n+=0.1){
        //document.write("Math.floor("+n+")="+Math.floor(n)+"<br/>");
        //document.write("Math.ceil("+n+")="+Math.ceil(n)+"<br/>");
        //document.write("Math.round("+n+")="+Math.round(n)+"<br/>");

        //随机1-10:乘以范围 加上起始值 强制转化为int
        var m=parseInt(Math.random()*10+1);
        //document.write(m+"<br/>");

    }   
}
testMath();

9、String字符串对象

/*
		    String对象:字符串
			和java完全相同的方法:
			  1 strObj.charAt(index):获取参数下标出的字符
			  2 string1.concat([string2...):把参数字符串拼接到当前字符串后面
			  3 strObj.indexOf(subString[, startIndex]):从startIndex位置处开始找 获取subString第一次出现的位置
			    strObj.lastIndexOf(substring[, startindex]):倒着找
			  4 stringObj.replace(old, new):使用new替换第一个old
			  5 stringObj.split(separator):使用separator切割当前字符串 获取一个字符串数组
			  6 stringvar.substr(start [, length ]):获取字串:从start开始长度为length
			    strVariable.substring(start, end):获取字串:从start开始到end-1结束
			  7 strVariable.toLowerCase( ):把所有字母转化为小写
                strVariable.toUpperCase( ):把所有字母转化为大写	

            特有方法:
              1 strObj.charCodeAt(index);获取index下标出的字符在编码标中对应的整数
              2 strVariable.bold():--<b>str</b>
				strVariable.fontcolor(colorVal) --<font color="colorVal">str</font>
				strVariable.fontsize(intSize)   --<font size="intSize">str</font>
				strVariable.italics( )	--<i>str</i>		  

		  */
function testStr(){
    var  str="abcabcabcaaass";
    str=str.replace("a","0");
    document.write(str+"<br/>");//abcabcabcaaass
    document.write(str.fontsize(7).fontcolor("red").bold().italics()+"<br/>");
}
testStr();

10、Global全局方法

/*
		  Global:全局:有些方法不属于某个对象  这样的方法统一定义在Global类中
		  1   isNaN(numValue) :判断参数数据是不是NaN
		  2   parseInt(obj): 把参数数据转化为int
		      parseFloat(obj): 把参数数据转化为float
		  3   eval(str): 使用js引擎解析字符串
*/
var str="var a=1,b=2;alert(a+b);";
eval(str);//var a=1,b=2;alert(a+b);
  • 方法:获取参数数字 保留指定的小数位数:3.1415926--3:3.142
  • 方法:写一个方法替换所有replace(old, new)
  • 方法:打印参数字符串中所有字符出现的次数
function myRound1(n,weiShu){//3.1415926--3
    //获取10的位数次方
    var temp1=Math.pow(10,weiShu);//1000
    var nNew=parseInt(n*temp1);//3141
    var temp2=Math.pow(10,-1*weiShu);//0.001
    var yuShu=n%temp2;//0.0005926
    nNew+=yuShu>=temp2/2?1:0;
    nNew=nNew/temp1;
    document.write("n="+n+",weiShu="+weiShu+",nNew="+nNew+"<br/>");
    return nNew;
}
myRound1(3.1415926,3);
function myRound2(n,weiShu){//3.1415926--3
    var str=n+"";
    var strNew=str.substring(0,str.indexOf(".")+weiShu+1);
    var m=parseInt(str.charAt(str.indexOf(".")+weiShu+1));
    strNew=parseFloat(strNew);
    strNew+=m>=5?Math.pow(10,-1*weiShu):0;
    document.write(strNew+"<br/>");
    return strNew;
}
myRound2(3.1415926,3);
function myReplace(str,oldC,newC){
    while(true){
        if(str.indexOf(oldC)==-1){
            break;
        }
        str=str.replace(oldC,newC);
    }
    document.write(str+"<br/>");
}
myReplace("abcabcacb123aaacc","a","0");

//方法:打印参数字符串中所有字符出现的次数
function printCiShu(str){
    //获取str中所有不重复的字符
    var ss="";
    for(var i=0;i<str.length;i++){
        var c=str.charAt(i);
        if(ss.indexOf(c)==-1){
            ss+=c;
        }
    }
    //遍历ss 获取一个字符
    for(var i=0;i<ss.length;i++){
        var c=ss.charAt(i);
        var ciShu=0;
        //获取c在str中出现的次数
        for(var j=0;j<str.length;j++){
            var cc=str.charAt(j);
            if(c==cc){
                ciShu++;
            }
        }
        document.write(str+"中字符("+c+")出现的次数是"+ciShu+"<br/>");
    }
}
printCiShu("abcabcacb123aaacc");
posted @ 2021-09-15 16:14  RenVei  阅读(36)  评论(0编辑  收藏  举报