JS第一部分

一、JS基础

1.js介绍

1)JavaScript是什么

  • JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思)
  • 脚本语言:不需要编译,运行过程中由js解释器(js引擎)逐行来进行解释并执行
  • 现在也可以基于Node.js技术进行服务器端编程
  • 浏览器分成渲染引擎和js引擎两部分:浏览器通过js引擎来执行js代码。

2)js组成

  • js分为ECMAScript(js语法),DOM(网页文档对象模型),BOM(浏览器对象模型)。
  • ECMAScript:是由ECMA(原欧洲计算机制造商协会)进行标准化的一门编程语言,这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMAScript语言的实现和拓展。
  • 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可拓展标记语言的标准编程接口。通过DOM提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)。
  • 浏览器对象模型(Browser Object Model,简称BOM),它提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等。

3)js引用

  • js的引用和css的引用类似,有行内式、内嵌式和外部文件。
  • 外部js文件的script标签中不可以写代码

4)js注释和常用语句

单行注释://注释
多行注释:/注释/
常用语句:

  • 1.alert(msg):浏览器弹出警示框
  • 2.console.log(msg):浏览器控制台打印输出信息
  • 3.prompt(info):浏览器弹出输入框,用户可以输入

2.变量

1)声明变量

语法:var 变量名;

  • var是一个js关键字,用来声明变量(variable变量)。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管
  • 我们需要通过变量名来访问内存中分配的空间

2)赋值

语法:age = 10;//给age这个变量赋值10

3)变量的初始化

语法:var age = 10;//声明变量的同时赋值为18

4)更新变量

var age = 18;
age = 81;//最后的结果就是81因为18被覆盖掉了
一个变量被重新赋值后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准。

5)同时声明多个变量

语法:var age = 10,name = ‘zc’,sex = 2;
同时声明多个变量时,只需要写一个var,多个变量名之间使用英文逗号隔开

6)声明变量特殊情况

情况说明结果
var age;console.log(age);只声明,不赋值undefined
console.log(age);不声明,不赋值,直接使用报错
age = 10;console.log(age)不声明,只赋值10

7)变量命名规范

  • 由字母(A-Za-z)、数字(0-9)、下划线()、美元符号($)组成,如:usrAae,num01,_name
  • 严格区分大小写。var app;和var App;是两个变量
  • 不能以数字开头。18age是错误的
  • 不能是关键字、保留字。例如:var、for、while
  • 变量名必须有意义。MMD BBD nl → age
  • 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。myFirstName
  • 推荐翻译网站:有道,爱词霸

3.数据类型

js数据类型分为两类:

  • 简单数据类型(Number,String,Boolean,Undefined,Null)
  • 复杂数据类型(object)
简单数据类型说明默认值
Number数字型,包含整型值和浮点型值,如21、0.210
String字符串类型,如“张三”注意咱们js里面,字符串都是带引号的“”
Boolean布尔值类型,如true、false,等价于1和0false
Undefinedvar a;声明了变量a但是没有给值,此时a=undefinedundefined
Nullvar a=null;声明了变量a为空置null

1)数字型Number

数字型进制

最常见的进制有二进制、八进制、十进制、十六进制。

// 1.八进制数字序列范围:0~7
var num1 = 07;// 对应十进制的7
var num2 = 019;// 对应十进制的19
var num3 = 08;// 对应十进制的8
// 2.十六进制数字序列范围:0 ~ 9以及A ~ F
var num = 0xA;

数字型范围

js中数值的最大和最小值

alert(Number.MAX_VALUE);// 1.7976931348623157e+308
alert(Number.MIN_VALUE);// 5e-324

数字型三个特殊值

alert(Infinity);// Infinity
alert(-Infinity);// -Infinity
alert(NaN);// Nan

  • Infinity,代表无穷大,大于任何值
  • -Infinity,代表无穷小,小于任何值
  • NaN,Not a number,代表一个非数值
isNaN()

用来判断一个变量是否为非数字的类型,如果不是数字返回ture,如果是数字返回false

2)字符串型String

引号的用法

字符串型可以是引号中的任意文本,其语法为双引号“”和单引号‘’
语法:
var strmsg1 = “我爱北京天安门”;// 使用双引号表示字符串
var strmsg2 = ‘我爱吃猪蹄’;
// 常见错误
var strmsg3 = 我爱大肘子;
因为html标签里面的属性使用的是双引号,js这里我们更推荐使用单引号

js可以用单引号嵌套双引号,或者用双引号嵌套单引号(外双内单,外单内双)
var strmsg1 = ‘我是“高富帅”程序猿’;// 可以用‘’包含“”
var strmsg2 = “我是‘高富帅’程序员";// 可以用“”包含‘’
// 常见错误
var badQuotes = ‘what”;// 报错,不能单双引号搭配

字符串转义符

类似html里面的特殊字符,字符串中也有特殊字符,我们称之为转义符。转义符都是用\开头。

转义符解释说明
\n换行符,n是newline的意思
\ |斜杠|
\ ’‘ 单引号
\ "” 双引号
\ttab缩进
\b空格,b是blank的意思
字符串长度

字符串是由若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的length属性可以获得整个字符串的长度
例:
var strmsg = “我是帅气多金的程序猿!”;
alert(strmsg.length);// 显示11

字符串拼接
  • 多个字符串之间可以使用 + 进行拼接,其拼接方式为字符串+任何类型=拼接之后的新字符串
  • 拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串
  • +号口诀,字符相连

// 1.字符串“相加”
alert(‘hello’ + ‘’ + ‘world’);// hello world
// 2.数值字符串“相加”
alert(‘100’ + ‘100’);// 100100
// 3.数值字符串 + 数值
alert(‘11’ + 12);// 1112

将变量加入拼接
例:
console.log(‘小明’+18);
var age = 18;
// console.log(‘小明age岁’);这样不行
console.log(‘小明’ + age);// 小明18
console.log(‘小明’ + age + ‘岁’);// 小明18岁

3)布尔型Boolean

布尔类型有两个值:true和false,其中true表示真(对),false表示假(错)
在表示整数的时候,ture表示1,false表示0,可以参与算数的运算

4)Undefined和Null

一个声明后没有被赋值的变量会有一个默认值undefined(如果进行相连或者相加时,注意结果)

var a;
console.log(a);// undefined
console.log(‘你好’ + a);// 你好undefined
console.log (11 + a);// NaN

一个声明变量给null值,里面存的值为空

var a = null;
console.log(‘你好’ + a);// 你好null
console.log(11 + a);// 11
console.log(ture + a);// 1

5)获取变量数据类型

语法:typeof 变量名;
如:console.log(typeof 变量名);
通过控制台字的颜色也可以判断数据类型

6)数据类型转换

转换为字符串
方式说明案例
toString()转成字符串var num=1;alert(num.toString());
String()强制转换转成字符串var num=1;alert(String(num));
加号拼接字符串(隐式转换)和字符串拼接的结果都是字符串var num=1;alert(num+“字符串”)
转换为数字型
方式说明案例
parseInt(string)函数*(注意大小写)将string类型转成整数数值型parseInt(string)
parseFloat(‘78’)函数*(注意大小写)将string类型转成浮点数数值型parseFloat(‘78.21’)
Number()强制转换函数将string类型转成数值型Number(‘12’)
js隐式转换(- * /)利用算数运算隐式转换为数值型‘12’-0
转换为布尔型
方式说明案例
Boolean函数其他类型转成布尔值Boolean(‘turn’)

代表空、否定的值会被转换为false,如‘’、0、NaN、null、undefined
其余值都会被转换为true
例:
console.log(Boolean(‘’)); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log (Boolean(‘小白’)); // true
console.log(Boolean(12)); // true

7)数组

数组指一组数据的集合,其中的每个数据被称为元素

// 普通变量一次只能存储一个值
var num = 10;
// 数组一次可以存储多个值
var arr = [1,2,3,4,5];

数组的创建方式
  • 利用new创建数组
    语法:var 数组名 = new Array();
  • 利用数组字面量创建数组
    语法:
    var 数组名 = [];
    var 数组名 = [12,ture,56.2,‘小白’];

数组中可以存放任意类型的数据,例如字符串,数字,布尔值等。

数组的长度

语法:数组名.length

数组中新增元素
  • 通过修改length长度新增数组元素
    例如:
    var arr = [1,2,3,4];
    arr.length = 7;
    // 由于没有给4.5.6的空间赋值,所以默认值是undefined
  • 通过修改数组索引新增数组元素
    var arr = [1,2,3,4];
    arr[4] = 5;

4.运算符

运算符也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号

1)算数运算符

*算数运算符:+(加) -(减) (乘) /(除) %(取余

浮点数的精度问题

浮点数值的最高精度是17位小数,但在进行算数计算时其精度远远不如整数

var result = 0.1 + 0.2;// 结果不是0.3,而是:0.30000000000000004
console.log(0.07*100);// 结果不是7,而是7.000000000000001

所以:不要直接判断两个浮点数是否相等

2)递增和递减运算符

前置递增运算符

++num前置递增,就是自加1,类似于num = num + 1,但是++num写成来更简单
先自加,后返回值

后置递增运算符

num++后置递增,就是自加1,类似于num = num + 1,但是num++写成来更简单
先返回原值,后自加

<script>	
 	var a = 10;	
 	++a;// ++a 11	a = 11	
 	var b = ++a + 2; // a = 12	++a = 12
	console.log(b); // 14
	
	var c = 10;
	c++; // c++ 11 c = 11
	var d =c++ +2; // c++ = 11	c=12I
	console.log(d); // 13
	
	var e = 10;
	var f = e++ + ++e; // 1. e++ = 10 e=11 	2.e=12	++e =12	
	console.log(f); // 22
	// 后置自增	先表达式返回原值 后面变量再自加1	
</script>

3)比较运算符

比较运算符:>(大于号)<(小于号)>=(大于等于号)<=(小于等于号)==(判等号(会转型))!=(不等号)(全等符号,如下)

37 === '37';// 结果false,===需要值和数据类型都一致

4)逻辑运算符

逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。
逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)

逻辑与短路运算

短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值

语法:表达式1 && 表达式2
如果第一个表达式的值为真,则返回表达式2
如果第二个表达式的值为假,则返回表达式1

逻辑或短路运算

语法:表达式1 || 表达式2
如果第一个表达式的值为真,则返回表达式1
如果第二个表达式的值为假,则返回表达式2

console.log(123 || 456);// 123
console.log(0 || 456);//456
console.log(123 || 456 || 789);// 123

5)赋值运算符

赋值运算符:=(直接赋值)+=(加一个数后赋值)-=(减一个数后赋值)=(乘一个数后赋值)/=(除一个数后赋值)%=(取模后再赋值*)

6)运算符优先级

优先级运算符顺序
1小括号()
2一元运算符++ – !
3算数运算符先* / % 后 + -
4关系运算符> >= < <=
5相等运算符== != === !==
6逻辑运算符先&&(逻辑与) 后逻辑或
7赋值运算符=
8逗号运算符

二、JS语法

流程控制主要有三种结构,分别为顺序结构(顺序执行)、分支结构(条件执行)和循环结构(循环执行)

1.顺序结构

顺序结构时程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

三元表达式

有三元运算符组成的式子称为三元表达式
如:? :
语法:条件表达式 ? 表达式1 :表达式2
如果条件表达式结果为真,则返回表达式1的值,如果条件表达式结果为假,则返回表达式2的值

2.分支结构

1)if 语句

// 条件成立执行代码,否则什么也不做
if(条件表达式){
//条件成立执行的代码语句
}

2)if else 语句

//条件成立,执行if里面的代码,否则执行else里面的代码
if(条件表达式){
//[如果]条件成立执行的代码
} else {
//[否则]执行的代码
}

3)if else if 语句

if(条件表达式1){
	语句1;
} else if(条件表达式2){
	语句2;
} else if(条件表达式3){
	语句3;
} else {
//以上条件都不成立执行的代码
}

4)switch 语句

switch(表达式){
	case value1:
		执行语句1;// 表达式等于(必须是全等)value1时要执行的代码
		break;
	case value2:
		执行语句2;// 表达式等于(必须时全等)value2时要执行的代码
		break;
	default:
		执行最后的语句;// 表达式不等于value时要执行的代码
}

3.循环结构

1)for 循环

for(初始化变量;条件表达式;操作表达式){
	//循环体
}
  • for 循环可以重复执行某些相同代码
  • for 循环可以重复执行些许不同的代码,因为我们有计数器
  • for 循环可以重复执行某些操作,比如算术运算符加法操作
  • 随着需求增加,双重for循环可以做更多、更好看的效果
  • 双重 for 循环,外层循环一次,内层 for 循环全部执行
  • for 循环是循环条件和数字直接相关的循环
  • 分析要比写代码更重要
  • 一些核心算法想不到,但是要学会,分析它执行过程

2)while 循环

while(条件表达式){
	//循环体代码
}
//先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则推出循环,执行后面的代码
  • JS 中循环有for、while、do while
  • 三个循环很多情况下都可以相互替代使用
  • 如果是用来计次数,跟数字相关的,三者使用基本相同,但是我们更喜欢用for
  • while和 do.….while可以做更复杂的判断条件,比for 循环灵活一些
  • while 和 do.….while执行顺序不一样,while先判断后执行,do.….while先执行一次,再判断执行
  • while 和do.….while执行次数不一样,do.…while 至少会执行一次循环体,而 while 可能一次也不执行

3)do while 循环

do {
	//循环体
} while(条件表达式)
//do while 先执行一次循环体,再判断条件表达式

4)continue

continue用于立即跳出本次循环,继续循环下一次循环(本次循环体中continue之后的代码就会少执行一次)

5)break

break用于立即跳出整个循环体(循环结束)

三、JS函数

函数在使用时分为两步:声明函数和调用函数

1.声明函数

// 声明函数
function 函数名(){
	//函数体代码
}

function是声明函数的关键字,必须小写
由于函数一般是为了实现某个功能才定义的,所以通常我们将函数命名为动词,比如:getSum

2.调用函数

//调用函数
函数名();//通过调用函数名来执行函数体代码

调用的时候千万不要忘记添加小括号
声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码

3.形参和实参

在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数时,同时也需要传递相应的参数,这些参数被称为实参。

  • 形参:形式上的参数。函数定义的时候传递的参数,当时并不知道是什么。
  • 实参:实际上的参数。函数调用的时候传递的参数,实参是传递给形参的

参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去

函数形参和实参个数不匹配的问题

参数个数说明
实参个数等于形参个数输出正确结果
实参个数多于形参个数只取到形参的个数
实参个数小于形参个数多的形参定义为undefined,结果为NaN

function sum(num1, num2){
console.log(num1 +num2);
}
sum(100,200); // 形参和实参个数相等,输出正确结果
sum(100, 400,500,700); // 实参个数多于形参,只取到形参的个数
sum(200); // 实参个数少于形参,多的形参定义为undefined,结果为NaN

注意:在js中,形参的默认值是undefined

形参和实参小结

  • 函数可以带参数也可以不带参数
  • 声明函数的时候,函数名括号里面的是形参,形参的默认值为 undefined
  • 调用函数的时候,函数名括号里面的是实参
  • 多个参数中间用逗号分隔
  • 形参的个数可以和实参个数不匹配,但是结果不可预计,所以个数要尽量匹配

4.函数的返回值

  • 有的时候,我们会希望函数将值返回给调用者,此时我们通过使用return语句就可以实现
  • return语句之后的代码不被执行
  • return只能返回一个值,一个数组可以返回
  • 函数都是有返回值的:
    1.如果有return则返回,return后面的值
    2.如果没有return则返回undefined

break,continue,return的区别

  • break :结束当前的循环体(如 for、while)
  • continue:跳出本次循环,继续执行下次循环(如 for、while)
  • return :不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的承数体内的代码

5.arguments的使用

当我们不确定有多少个参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments 对象,arguments 对象中存储了传递的所有实参

// arguments 的使用
function fn() {
// console.log(arguments);// 里面存储了所有传递过来的实参 arguments=[1,2,3]
console.log(arguments.length);//测长度
console.log(arguments[2]);
// 我们可以按照数组的方式遍历arguments
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
fn(1, 2, 3);
// 得到的是伪数组并不是真正意义上的数组
// 1.具有数组的 length 属性
// 2.按照索引的方式进行存储的
// 3.它没有真正数组的一些方法 pop() push()等等

函数可以调用另一个函数

function fn1() {
	console.log(111); 
	fn2();
	console.log('fn1');
}
function fn2() {
	console.log(222); 
	console.log('fn2');
}
fn1();

结果:111 222 fn2 fn1

四、JS事件

1.获取元素

1)根据ID获取

使用getElementByld()方法可以获取带有ID的元素对象。
语法:document.getElementById(‘id名’);

<div id="time">2019-9-9</div>
<script>
// 1.因为我们文档页面从上往下加载,所以先得有标签。所以我们script写到标签的下面
// 2. get 获得 element 元素 by 通过驼峰命名法
// 3.参数 id是大小写敏感的字符串
// 4.返回的是一个元素对象
var timer = document.getElementById('time'); console.log(timer);
console,log(typeof timer);
// 5.console.dir 打印我们返回的元素对象 更好的查看里面的属性和方法
console.dir(timer); 
</script>

结果:2019-9-9

2)根据标签名获取

使用getElementByld()方法可以获取带有指定标签名的元素对象集合。
语法:document.getElementByTagName(‘标签名’);

  • 因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历
  • 得到元素对象是动态的

还可以获取某个元素(父元素)内部所有指定标签名的子元素
注意:父元素必须是单个对象(必须指明是哪一个元素的对象),获取的时候不包括父元素自己。

<ul>
	<li>1</li>
	<li>1</li>
	<li>1</li>
	<li>1</li>
</ul>
<ol>
	<li>1</li>
	<li>1</li>
	<li>1</li>
	<li>1</li>
</ol>
<script>
// 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的
	var lis = document.getElementsByTagName('li');
	console.log(lis); 
	console.log(lis[0]);
// 2.我们想要依次打印里面的元素对象我们可以采取遍历的方式 
	for (var i = 0; i < lis.length; i++) {
		console.log(lis[i]);
	}
// 3.如果页面中只有一个li 返回的还是伪数组的形式
// 4.如果页面中没有这个元素返回的空的伪数组的形式
// 5、element.getElementsByTagName('标签名');
// var ol = document.getElementsByTagName('ol'); 
// console.log(o1[0].getElementsByTagName('li')); //这样是不正确的
	var ol = document.getElementById('ol');
	console.log(ol.getElementsByTagName('li'));
</script>

3)通过html5新增的方法获取

  • document.getElementsByClassName('类名’);
    // 根据类名返回元素对象集合
  • document.querySelector(‘选择器’);
    // 根据指定选择器返回第一个元素对象
  • document.querySelectorAll(‘选择器’);
    // 根据指定选择器返回
<script>
// 1. getElementsByClassName 根据类名获得某些元素集合
var boxs =document.getElementsByClassName('box'); console.log(boxs);
// 2. querySelector 返回指定选择器的第一个元素对象 切记 里面的选择器需要加符号.box #nav 
var firstBox=document.querySelector('.box'); console.log(firstBox);
var nav =document.querySelector( "#nav'); I 
console.log(nav);
var li = document.querySelector('li'); console.log(li);
// 3. querySelectorA11()返回指定选择器的所有元素对象集合
var allBox =document.querySelectorAll('.box'); console.log(allBox);
var lis = document.querySelectorAll('li'); console.log(lis);
</script>

4)特殊元素获取

获取body元素

1.document.body // 返回body元素对象

获取html元素

1.document.documentElement // 返回html元素对象

2.事件

事件分为三部分:事件源,事件类型,事件处理程序
1.事件源:事件被触发的对象
2.事件类型:如何触发事件,比如:鼠标点击(onclick)
3.事件处理程序,通过一个函数赋值的方式完成

<input type="bottom" value="点击" id="btn">
<script>
	var a=document.getElementById('btn');
	a.onclick = function() {
	alert('你好')
}
</script>

常见的鼠标事件

鼠标事件触发条件
onclick鼠标点击左键触发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值