JavaScript —— 基础

目录

1. 简介

2. JavaScript在HTML中的使用

2.1JavaScript的引入

2.2 script标签的位置

3. JavaScript基本概念

3.1 变量

3.2 数据类型

3.3 常见操作符

3.4 逻辑语句

3.5 函数


1. 简介

JavaScript 是一种轻量级的编程语言,是 Web 的基本编程语言,所有的现代的 HTML 页面都使用 JavaScript,文件以 .js 为后缀。 

  • 一个完整的JavaScript 实现由下列三个部分组成:
    • 语言核心(ECAMScript)
    • 基于文档对象模型编程(DOM)
    • 基于浏览器对象模型编程(BOM)

2. JavaScript在HTML中的使用

  • 2.1JavaScript的引入

    • 2.1.1 使用script标签
      • <script>和</script>会告诉浏览器 JavaScript 在何处开始和结束。
    • 2.1.2 引入方式
      • 直接在页面中嵌入JavaScript代码
        • 缺点:js脚本代码和html标签混合使用,不利用后期的管理
      • 使用包含外部JavaScript文件
        • 优点:便于维护、可缓存
        • 使用<script src="外部文件的地址"></script>  必须是有开始有结束,否则导入失败!
      • 注: 带有 src 属性的<script>元素不应该在其<script>与</script>标签之间包含额外的 JavaScript 代码。如果包含了了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>javascript的引入方式</title>
		<!--直接在页面中嵌入JavaScript代码-->
		<script type="text/javascript"></script>
			
		<!--引入外部js文件-->
		<script src="js/01.js"></script>
	</head>
	<body>
	</body>
</html>
  • 2.2 script标签的位置

<script> 标签可被放置在 HTML ⻚页⾯面的 <body> 和 <head> 部分中,或者同时存在于两个部分中。 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>script标签的位置</title>
		<script>
		function firstJs(){
			document.write("head中的JavaScript<br/>");
	 	}
		firstJs();
		</script>
	</head>
	<body>
		<script>
			function secondJs(){
			document.write("body中的JavaScript");
	 	}
			secondJs();
		</script>
	</body>
</html>

3. JavaScript基本概念

JavaScript是一种弱类型脚本语言,不同于强类型语言Java,其都是使用 var 定义变量。

  • 3.1 变量

定义变量时使用 var 操作符(var 是一个关键字),后跟变量名(即一个标识符)。

  • 未经过初始化的变量,会保存一个特殊的值——undefined。
  • 初始化的过程就是给变量赋一个值,并不标记类型。
  • 如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁。
  • 若想创建一个全局变量,则省略var操作符。
  • JavaScript 变量量均为对象。
  • 3.2 数据类型

    •  3.2.1 分类
      • 5 种简单数据类型(基本数据类型)
        • Undefined(未赋值)、Null(空)、 Boolean(布尔)、Number (数字)和 String(字符串)
      • 1 种复杂数据类型
        • Object(对象),Object 本质上是由一组无序的名值对组成的。
    • 3.2.2 typeof 操作符
      • 对一个值使用 typeof 操作符可能返回下列某个字符串
        • "undefined"——值未定义,或定义后未赋值,或为 undefined
        • "boolean"——值是布尔值;
        • "string"——值是字符串、字符
        • "number"—值是数值(整数、小数)
        • "object"——值是对象或 null(null 值表示一个空对象指针)
        • "function"——值是函数
  • <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>js的变量和数据类型</title>
    		<script>
    			var a=10; //相当于var a=new Number(10);  number->Number js内置对象
    			//var a=20;  //a=10会被a=20覆盖
    			var b=3.14;
    			var c='c';
    			var s="bonjour";//相当于var s=new String("hello");
    			var e=true;
    			var f=new Object();
    			document.write("a的值是:"+a+"   数据类型是:"+typeof(a)+"<br/>");
    			document.write("b的值是:"+b+"   数据类型是:"+typeof(b)+"<br/>");
    			document.write("c的值是:"+c+"   数据类型是:"+typeof(c)+"<br/>");
    			document.write("d的值是:"+d+"   数据类型是:"+typeof(d)+"<br/>");
    			document.write("e的值是:"+e+"   数据类型是:"+typeof(e)+"<br/>");
    			document.write("f的值是:"+f+"   数据类型是:"+typeof(f)+"<br/>");
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    • 3.2.3 NaN
      • 非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
      • 任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN。 
      • NaN 与任何值都不相等,包括 NaN 本身。
      • isNaN()函数,任何不能被转换为数值的值都会导致函数返回 true。
    • 3.2.4 数值转换
      • Number():可用于任何数据类型
        • 如果是数字值,只是简单的传入和返回。
        • 如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。
        •  如果是 null 值,返回 0。
        • 如果是 undefined,返回 NaN。
        • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值(前导的零被忽略);
        • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(忽略前导零);
        • 如果字符串是有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
        • 如果字符串是空的(不包含任何字符),则将其转换为 0;
        • 如果字符串串中包含除上述格式之外的字符,则将其转换为 NaN。
        • 如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。
      • parseInt():专门用于字符串转换成数值
        • 忽略字符串前面的空格,直至找到第一个非空格字符;
        • 如果第一个字符不是数字字符或者负号,parseInt() 就会返回 NaN;
        • 如果第一个字符是数字字符,parseInt() 会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。 
      • parseFloat()::专门用于字符串转换成数值
        • 从第一个字符(位置 0)开始解析每个字符;
        • 一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
        • 字符串中的第一个小数点是有效的,而第二个小数点就是无效的了。
        • 始终忽略前导的零。parseFloat() 只解析十进制值,没有通过第二个参数指定基数的用法。十六进制格式的字符串则始终会被转换成 0。
        • 如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零),parseFloat()会返回整数。
  • <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>js类型转换函数</title>
    		<script>
    			var a="10";
    			var a="10abc";
    			var a="a10bc";
    			document.write("a的值是:"+a+"	类型:"+typeof(a)+"<br/>");
    			a=parseInt(a);
    			document.write("转换后的a:"+a+"	类型:"+typeof(a)+"<br/>");
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    • 3.2.5 String类型
      • 把一个值转换为一个字符串方式
        • 使用几乎每个值都有的 toString()方法(null 和 undefined 值没有这个方法)
        • 使用转型函数 String(),这个函数能够将任何类型的值转换为字符串
          • 如果值有 toString()⽅方法,则调用该方法并返回相应的结果
          • 如果值是 null,则返回"null"
          • 如果值是 undefined,则返回"undefined"
    • 3.2.6 Object类型
      • 是一组数据和功能的集合,对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。
      • Object 的每个实例都具有下列属性和方法
        • constructor:保存着用于创建当前对象的函数。
        • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定。例: o.hasOwnProperty("name")
        • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
        • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举。 与 hasOwnProperty() 方法一样,作为参数的属性名必须以字符串形式指定。
        • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
        • toString():返回对象的字符串表示。
        • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
  • 3.3 常见操作符

  • 3.3.1 一元操作符

自加、自减、一元加和减

  • 3.3.2 布尔操作符

与(AND)、或(OR)、非(NOT)

  • 逻辑非:!表示
  • 逻辑与:&&(属于短路操作)
  • 逻辑或:||(属于短路操作)
  • 3.3.3 乘性操作符

乘法、除法及求模。JavaScript中的5/2返回值为2.5。

  • 3.3.4 加性操作符

加法与减法

  • 3.3.5 关系操作符

小于(<)、大于(>)、小于等于(<=)、大于等于(>=)

  • 任何操作数与NaN进行关系比较,结果为false
  • 3.3.6 相等操作符
    • 相等(==)与不相等(!=)
      • null 和 undefined 是相等的
      • 如果两个操作数都是对象,则比较它们是不是同一个对象
      • 如果有一个操作数是 NaN,则相等操作符返回 false,不相等操作符返回 true
    • 全等与不全等
      • 只有在两个操作数相等且类型相同的情况下,才全等。
  • 3.3.7 条件操作符

即三目运算符

  • 3.3.8 赋值操作符

加/赋值(+=)、 减/赋值(-=)、乘/赋值(*=)、除/赋值(/=)、模/赋值(%=)

  • 3.3.9 逗号操作符

使用逗号操作符可以在一条语句中执行多个操作(可声明多个变量)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>操作符</title>
		<script>
			var a=10;
			var b=true;  
			var b=15;
			document.write(a+b+"<br />");
			document.write(a>b+"<br />");
			document.write(true&&false+"<br />");
			document.write(true||false+"<br />");
			var age=12;
			document.write((age>=18)?"成年":"未成年");
		</script>
	</head>
	<body>
	</body>
</html>
  • 3.4 逻辑语句

  • 3.4.1 if语句
  • if(表达式){
        语句1;
    }else{
        语句2;
    }
    • 如果表达式是number类型,非零的数值条件成立;零条件不成立
    •  表达式是string类型,非空字符串条件成立,否则不成立
    •  表达式中如果是对象类型,若是null不成立,否则成立
    • 表达式是boolean类型,true成立,false不成立
  • 3.4.2 do-while语句
do {
     语句
} while (expression); // expression不成立时跳出循环
  • 3.4.3 while语句
while(expression) {
     语句
}
  • 3.4.4 for语句
for (initialization; expression; post-loop-expression) {
     语句
}
  • 3.4.5 for-in语句

类似于Java中的foreach,用于遍历数组或对象的使用

在使用 for-in 循环之前,先检测确认该对象的值不是 null 或 undefined

for (var 变量名 in 数组名称/具体的对象名称) {
     语句
}
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>for-in语句</title>
<script>
//定义一个数组
var arr = [10,20,30,40] ;
//普通for循环
for(var i = 0 ; i <arr.length ;i++){
	document.write(arr[i]+"&nbsp;") ;
}
document.write("<hr />") ;

for(var i in arr){
	alert(arr[i]) ;
}
       
//js中要创建自定义对象,先去定义对象
//定义对象: 使用function 对象(形式参数){}
function Person(name,age){//this:代表当前Person对象地址值的引用
	this.name = name ;
	this.age = age ;
}

//var 定义对象
var p = new Person("张三",20) ;
//遍历当前Person中的所有属性
for(var j in p){
	document.write(p[j]+"<br />") ;
}
</script>
	</head>
	<body>
	</body>
</html>
  • 3.4.6 break和continue语句

break跳出整个循环;continue跳出本次循环。

  • 3.4.7 switch语句

java中的swtich(表达式),表达式数据类型可以是字符串,case后的值只能是常量
           js中的case后既可以是常量,也可以是变量(js是弱类型语言),也可以是表达式

switch (expression) {
      case value: statement
        break;
      case value: statement
        break;
      case value: statement
        break;
      case value: statement
        break;
      default: statement
} 
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>流程控制语句</title>
		<script>
			/**
			 * if...else...语句
			 */
			if(10){
				alter("成立");
			}else{
				alert("不成立");
			}
			
			/**
			 * switch语句
			 */
			var i="b";
			
			switch(i){
				case "a":
					document.write("a<br />");
					break;
				case "c":
					document.write("b<br />");
					break;
				case i:
					document.write("c<br />");
					break;
			}
			 document.write("<hr />")
			
			/**
			 * 循环语句:for,while,do-while循环
			 * 			for-in语句(类似于java中的foreach
			 * 			with语句
			 */		
			 
			 /**
			  * with语句
			  * with(document){
			  * }
			  * 
			  */
			 
			 /**
			  * for循环
			  */
			 for(var i=1;i<5;i++){
			 	document.write("vie     ");
			 }
			 document.write("<hr />")
			 
			 /**
			  * var 变量名=值;
			  * while(条件表达式){
			  * 	循环体语句;
			  * 	步长语句;
			  * }
			  */
			 var i=1;
			 while(i<4){
			 	document.write("amour<br />");
			 	i++;
			 }
			  document.write("<hr />")
			  
			  var j=1;
			  do{
			  	document.write("coissant<br/>");
			  	j++;
			  }while(j<4);
		</script>
	</head>
	<body>
	</body>
</html>
  • 3.5 函数

使用function关键字来声明,后跟一组参数以及函数体。

function functionName(arg0, arg1,...,argN) {
    statements 
}
  • 3.5.1 函数的返回值
    • 函数会在执行完return语句之后停止并立即退出。
    • 位于return语句之后的任何代码都永远不会执行。
    • 一个函数中可以没有return语句,也可以包含多个return语句。
  • 3.5.2 函数的参数
    • ECMAScript中的参数在内部使用一个数组arguments来表示的。
      • arguments数组:将实际参数和形式参数绑定,对其进行赋值操作
    • 不要求传递的参数的个数及数据类型,因此不需要写参数类型,直接写参数名称
    • 可以使用length属性来确定传递进来的参数个数。
    • 所有参数传递的都是值,而不是通过引用传递参数
    • 实际参数个数小于形式参数个数,结果NaN;实际参数个数大于形式参数个数,多余的被移除
  • 3.5.3 不存在函数重载
    • 由于ECMAScript是弱类型,因此不存在方法重载的概念。若出现两个重名函数,之后定义的函数会覆盖掉之前定义的
  • 练习
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>月份查询</title>
		<script>
			//输入月份的值,查询对应的天数
			/**
			 * 事件编程3要素:
			 * 	1)事件源(点击按钮)
			 * 	2)事件监听器(执行某个逻辑函数)
			 * 	3)注册事件(事件源和函数进行绑定)
			 */
			//事件监听器
			function checkMonth(){
				//1.获取到input标签对象:通过id属性值获取
				//document.getElementById("id属性值");
				var monthInput=document.getElementById("monthInput");
				//2.通过当前标签对象获取里面的内容
				//value属性
				monthInput=monthInput.value; //String类型
				//3.使用呢流程控制语句进行判断
				//当String类型的整数进行比较时,会自动转换成number类型
				if(monthInput==1||monthInput==3||monthInput==5||monthInput==7||monthInput==8||monthInput==10||monthInput==12){
					alert("31天");
				}else if(monthInput==4||monthInput==6||monthInput==9||monthInput==11){
					alert("30天");
				}else if(monthInput==2){
					alert("28天");
				}else{
					alert("没有该月份");
				}
			}
		</script>
	</head>
	<body>
		请输入月份的值:<input type="text" id="monthInput"/><br />
		<!--事件源-->
		<input type="button" value="查询" onclick="checkMonth()"/><!--单击点击事件:onclick-->
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_42142477/article/details/88999399