JavaScript笔记


title: JavaScript笔记
tags:
-入坑系列
categories: 编程美学


JavaScript


目标:学习JavaScript,掌握JavaScript核心知识,能够灵活运用其语法知识。

计划:一个月的学习时间,每天学习两个小时(如果可以的话)。

简介:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能.

JS基础,helloworld

alert:在页面中弹出一个窗口;document.write:想body中写入内容;console.log:向控制台输入一串内容。

字面量和变量

字面量可以直接使用,但不方便,一般不适用。eg:1 2 3 4 5。

变量可以保存字面量,而且变量的值可以任意的改变。使用起来比较方便,所以在开发中使用变量保存一个字面量来使用。声明变量用var ,eg: var age = 20; 尽量做到见名知意。

标识符
  1. 标识符中可以含有 字母,数字,下划线和$;
  2. 标识符不能以数字开头;
  3. 标识符不能有ES中的关键字和保留字冲突;
  4. 标识符一般采用驼峰命名法。
数据类型
  1. String——字符串
    1. 字符串需要用双引号或单引号包括起来。
    2. 双引号里面不能包裹双引号,单引号内能包裹双引号。
  2. Number——数字
    1. 包括整数和浮点数。
    2. 可以用typeof来检查变量的数据类型。
    3. 最大值:Number.MAX_VALUE 如果变量表示的数字,则返回一个无穷大Infinity——其属于字面量。
    4. NaN表示一个特殊数字——Not A Number,使用typeof检查NAN返回也是一个Number类型。
  3. Boolean——布尔值
  4. NUll——空值
  5. Undefind——未定义
  6. Object——对象

除Object对象是引用数据类型外,其他都是基本数据类型。

强制类型转换

将其他数据类型转化为String

  1. 调用其它数据类型的toString() 方法 this.toString;不会影响原变量,会返回一个Strng值 。
  2. 调用String()函数,将被转换的数据当做参数传入。Number和Boolean实际调用toSting()方法,Null和Undefind只是将值转换成了“Null”和“Undefined”。

将其他数据类型转化为Number

  1. ​ 调用Number()函数,将其它数据类型当做参数传入。如果字符串中含有非数字类型的数据则转化为NaN;如果字符串是空串或者都是空格则转化为0;Boolean中true转成 1 false转成 0;Null转数字为0;Undefined转数字为NaN。
  2. parseInt()将一个字符串转换为整数;parseFloat()将一个字符串转换为浮点数。只转化字符串中的有效数字。从左至右,遇到非法则停止转换,返回已转化的值

将其他数据类型转化为Boolean

  1. ​ 调用Boolean()函数,数字转Boolean除了0和NaN是false,其他都是true;字符串转Boolean除了空串是false;Null和Undefined都是false;对象Object类型为true。
运算符

运算符又叫操作符,运算符可以对一个或多个值进行运算,并返回结果。比如typeof就是一个运算符,用于返回一个变量的类型,以字符串的形式返回类型名。

**支持四则运算,逻辑运算符和取摸(%)运算符等等,和Java相似。**特殊的任何数和NaN做运算都的NaN;字符串相加和java一样,拼接效果。

[外链图片转存失败(img-guOOotnH-1563980703107)(/img/优先级.png)]

流程控制

和Java相识——判断,循环,switch选择语句

判断语句:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script>
		var year = prompt('请输入年份');
		if(year%4==0 && year%100!=0 || year%400==0){
			alert('您输入的'+year+'是闰年')
		}else {
			alert('您输入的'+year+'不是闰年')
		}
	</script>
</head>
<body>
	
</body>
</html>

以下不再举例。

函数

函数的声明与使用

  1. function声明函数的关键字,全部是小写。

  2. 函数时做某件事情的,函数名一般是动词。

  3. 函数不调用是不执行的。

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script type="text/javascript">
    			//1.声明函数
    			function getSum() {
    				var sum=0;
    				for(var i=0; i<=100; i++){
    					sum+=i;
    				}
    				console.log(sum);
    			}
    			
    			//2.调用函数
    			getSum();
    			getSum();
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    
    

带参函数

​ 1.参数不固定,可以是多个参数。

​ 2.参数类型不用声明,自动匹配,多个参数用逗号隔开,默认值为undefined。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//1.声明函数
			function getSum(star,end) {
				var sum=0;
				for(var i=star; i<=end; i++){
					sum+=i;
				}
				console.log(sum);
			}
			
			//2.调用函数
			getSum(1,100);
			getSum(1,1000);
		</script>
	</head>
	<body>
	</body>
</html>

形实参不匹配

  1. 相同时输出正确结果。
  2. 实际参数多于形式参数时,取到形式参数的数量。
  3. 实际参数少于形式参数时,多于的形式参数定义为undefined。

函数的返回值

如果函数没有return则返回Undefined。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			function getMax(arr){
				var max = arr[0];
				for(var i=0; i<arr.length; i++){
					if(arr[i] > max){
						max=arr[i];
					}
				}
				return max;
			}
			var result = getMax([3,6,1,15,188]);
			console.log(result);
		</script>
	</head>
	<body>
	</body>
</html>

arguments的使用

==当我们不确定有多少个参数传递的时候,可以使用arguments来获取。==arguments以伪数组的形式存储了所有的实参。只有函数有arguments对象。

伪数组

  1. 具有数组的长度length属性。
  2. 按照索引的形式进行存储的。
  3. 它没有真正数组的一些方法。

作用域

提高的程序的可靠性,避免命名冲突。

全局作用域:整个script标签,或者一个单独的JS文件。其中的变量和在函数中赋值但没有声明的变量叫作全局变量

局部作用域:在函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用。其中的变量叫作局部变量

JavaScript预解析

JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。

  1. 预解析js引擎会把js里面的所有var还有function提升到当前作用域的最前面
  2. 代码执行 按照代码书写的顺序从上往下执行
  3. 变量提升只提升声明,不提升赋值
  4. 函数提升把所有的函数声明提升到作用域最前面,但是不调用
JavaScript对象

对象是一组无序的相关属性和方法的集合,所有事物都是对象,例如字符串,数组,数值,函数。

  1. 属性:事物的特征
  2. 方法:事物的行为

为什么需要对象

JavaScript中的对象表达结构更清晰,更强大。(类似java中的类声明的对象)

创建对象的三种方式

  1. 利用字面量创建对象

    1. 调用对象属性采用 对象名.属性名和对象名[‘属性名’]
    2. 调用对象方法采用 对象名.方法名
    3. 每个属性和方法之间用逗号结束
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script type="text/javascript">
    			var obj = {
    				uname: '张三丰',
    				age: 18,
    				sex: '男',
    				sayHi: function() {
    					console.log('hi~');
    				}
    			}
    			console.log(obj.uname);//两种调用属性的方法
    			console.log(obj['age']);
                obj.sayHi();
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    
    

    2.利用 new Object 创建对象

    1. 利用等号赋值的方法添加对象的属性和方法

    2. 每个属性和方法之间用分号结束

      <!DOCTYPE html>
      <html>
      	<head>
      		<meta charset="utf-8">
      		<title></title>
      		<script type="text/javascript">
      			//利用 new Object 创建对象
      			var mr = new Object();
      			mr.name = '名人';
      			mr.sex = '男';
      			mr.age = '19';
      			mr.skill = function() {
      				console.log('色诱之术');
      			}
      			console.log(mr.name);
      			console.log(mr['sex']);
      			mr.skill();
      		</script>
      	</head>
      	<body>
      	</body>
      </html>
      

3.利用构造函数创建对象

  1. 构造函数就是把对象中相同的对象和方法抽象出来封装到函数中

  2. 构造函数泛指某一大类,(类似Java中的“类”)

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script type="text/javascript">			
    			//利用构造函数的方法创建对象			
    			function Star(name, age, sex) {
    				this.name = name;
    				this.age = age;
    				this.sex = sex;
                    this.sing = function(sang) {
    					console.log(sang);
    				}
    			}
    			var ldh = new Star('刘德华', 46, '男');
    			var zxy = new Star('张学友', 44, '男');
    			console.log(ldh.name);
    			console.log(ldh['age']);
                ldh.sing('冰雨');
    			console.log(zxy.name);
    			console.log(zxy['age']);
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

new关键字执行过程

  1. new构造函数可以在内存中创建一个空对象
  2. this就会指向刚才创建的空对象
  3. 执行构造函数里面的代码,给这个空对象添加属性和方法
  4. 返回这个对象

遍历对象

​ for in 遍历对象

for(临时变量 in 对象) {
	//执行语句
	console.log(k); //输出的是属性名
	console.log(obj[k]); //输出的是属性值
}
内置对象

MDN文档

Math对象

Math对象不是一个构造函数,里面的属性和方法都是静态的。

Math.floor()向下取整;Math.ceil()向上取整;Math.round()四舍五入;Math.random()取随机数。

Date日期对象

日期对象是个构造函数,必须使用new来创建

var date = new Date();
var date = new Date(2019, 10, 12);
var date = new Date('2019-10-12')
//日期格式化 
var year=date.getFullYear();
 //月份返回比实际小一 (0-11)
var month=date.getMonth()+1
var dates=date.getDate()
var day=date.getDay();//返回周几,周日为“0”
var hour=date.getHours();
var min=date.getMinutes();
var sec=date.getSeconds();

倒计时案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			function countDown(time) {
				var nowTime = +new Date();
				var endTime = +new Date(time);
				var times = (endTime-nowTime)/1000;//获取总的剩余秒数
				var d = parseInt(times/60/60/24);
				d = d >= 10 ? d : '0'+d;
				var h = parseInt(times/60/60%60);
				h= h >= 10 ? h : '0'+h;
				var m = parseInt(times/60%60);
				m = m >= 10 ? m : '0'+m;
				var s = parseInt(times%60);
				s = s >= 10 ? s : '0'+s;
				console.log(d+'天 '+h+'时 '+m+'分 '+s+'秒');
			}
			countDown('2019-7-25 18:00:00');
		</script>
	</head>
	<body>
	</body>
</html>

简单和复杂数据类型

简单类型又叫基本数据类型或者值类型,复杂数据类型又叫引用数据类型

**值类型:**在存储时变量中存储的是值本身,所以叫做值类型。(string,number,Boolean,undefined,null)

**引用类型:**new出来的对象都是引用类型

基本数据类型形实参匹配是传递的是值;引用类型传递的是地址。

高阶部分

获取元素

根据ID获取元素

var id =document.getElementId( ‘id’ );

console.dir( id );

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div>HelloWorld</div>
		<div id="box">你好世界</div>
		<script type="text/javascript">
			var id = document.getElementById('box');
			console.dir(id);
		</script>
	</body>
</html>

获取对象的类型

console.log( xxx.constructor ); Ps:typeof不能获取对象的具体类型,获取对象类型始终返回Object。

根据标签获取元素

var id =document.getElementsTagName( ‘id’ );

console.dir( id );

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div>11111111111111</div>
		<div>22222222222</div>
		<div>33333333</div>
		<p>ppppppppppp</p>
		
		<script type="text/javascript">
			var divs = document.getElementsByTagName('div');
			console.log(divs);
			for( var i=0; i<divs.length; i++){
				var div = divs[i];
				console.log(div);
			}
		</script>
	</body>
</html>

参考文献

黑马程序员视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值