1.JS的发展过程 历史回顾、能做什么
给页面添加动态效果
2.JS是什么 简介、实现、版本
运行在客户端浏览器的脚本语言
3.JS语言特点和定位 语言特点、与web开发流程区别
弱类型 面向对象
java
ecmascript 5 es5
es6 es2015
js的组成
ECMAScript 核心 数据类型 运算符 语句 函数 数组 字符串
DOM 文档对象模型
BOM 浏览器对象模型
四种输出方式
1. 打印到页面上 document.write("输出的内容"); 识别HTML标签 2. 在控制台中输出 console.log("输出的内容"); 3. 输出到浏览器的提示框 alert("输出的内容"); 4. 输入到浏览器的输入提示框 prompt(“输入的内容”,默认值)
js的基本语法
1.JS的引入方式
两种 1.html页面内 2. 引入外部js文件
2.标识符
1.概念 变量、函数、属性的名字,或者函数的参数
2.命名规则 a.字母数字下划线$组成,不能以数字开头, b.严格区分大小写 c.不能是JS关键字和保留字
3.变量及变量声明
1. 先声明,后赋值 2.边声明,边赋值 3.一次性声明多个变量并赋值
js注释: 单行注释 // (快捷键 Ctrl+?)
多行注释 /* 注释的内容 */js引入: 内部引入 直接在页面的script标签对里面写代码
一般情况下script标签放在body的最下面
外部引入 head标签里面
js基本运算符
typeof 操作符
检测变量的数据类型,返回值是字符串的形式,返回值有以下6种:字符串、数值、布尔、undefined、object、functionJS数据类型: 简单数据类型 5种 复杂数据类型 1种 1.String " " '' 转义字符(特殊的字符串) \ \n 换行 \" 2.Number 整数 小数 NaN Not a number 代表无法计算或者计算超出范围 、
(1)NaN与任何值都不相等,包括本身
(2) 任何与NaN的操作结果都是NaN
3.Boolean true false
4.Undefined undefined 变量声明未赋值
5.Null null 显式的把值设置未null
数据类型转换
**强制类型转换:**
toString() --转换除 Null 和Undefined 的 String() ----转换任意类型的
parsetInt() parseFloat() ---字符串转换为数值 Number() --- 转换任何数据类型的
Boolean() 转换为假值的7个值
**隐式数据类型转换:**
+ -
补充:
x+''
x-0 +x
!!x
运算符
算术运算符 + - * / % ++ –
逻辑运算符 && || !
&& 并且 全真为真( 左右的结果都为真),其余为假
|| 或 全假为假,其余为真 ,只要有一个为真,就是true
! 取反 - 真变假,假变真
比较运算符 > < >= <= == === != !==
比较运算符 - 关系运算符 结果:true false
> < >= <=
== 判断相等,只要值相等就相等
=== 全等,不仅值相等,数据类型也要相等
!= 不相等,与 == 结果相反
!== 非全等,与 === 结果相反
赋值运算符 = += -= *= /= %=
其他运算符 - 三元运算符 条件表达式 ? 条件表达式为真执行的语句 : 条件表达式为假执行的语句
js语句
语句:js里面的一整句话或者表达式,以分号结尾
分号:代表一个语句执行结束
分支/条件语句:条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句
单分支、双分支、多分支
if(表达式){
表达式为真
}else{
表达式为假
}
if(表达式1){
表达式1为真
}else if(表达式2){
表达式1为假2为真
}else{
表达式1、2都为假
}
switch语句
switch (表达式/变量) {
case 变量的值:
// 执行语句1
break;
case 变量的值:
// 执行语句2
break;
default:
// 其他条件都不满足,执行语句end
break;
}
switch的条件---变量不会发生数据类型转换 ===
简易计算器
<script>
//驼峰命名法 javaScript
var ltNum1 = Number(prompt('请输入第一个数'));
var ltNum2 = Number(prompt('请输入第二个数'));
var ltFu = prompt('请输入运算符');
var result;
// result 结果
switch (ltFu) {
case '+':
result = ltNum1 + ltNum2;
break;
case '-':
result = ltNum1 - ltNum2;
break;
case '*':
result = ltNum1 * ltNum2;
break;
case '/':
result = ltNum1 / ltNum2;
break;
case '%':
result = ltNum1 % ltNum2;
break;
default:
alert('请输入正确的算术运算符');
break;
}
console.log('运算结果是:' + result);
</script>
循环语句
循环语句就是程序执行的一个回路,可以让一部分代码重复执行
for
for(初始化变量;循环条件检测;更新变量值){
}
while
while(条件){
//条件为true执行的代码
}
do while
do {
//先执行一次再判断条件
} while (条件);
当表达式条件不满足的 while不会执行,但是do-while会执行一次
跳转语句
break 结束退出循环
continue 跳过当次循环,执行下一次
Break会影响后面循环的执行,执行后直接结束整个循环,但是continue不会影响后面循环的继续执行
函数概念定义
函数概念:函数是由事件驱动或者被调用的时候执行的可被重复利用的代码块, 函数是一组可以随时随地运行的语句
**作用:**
使程序变得简洁清晰
易于代码维护
提高了代码的复用性,提高程序开发的效率
函数定义
function 函数名(参数1,参数2){
函数体 ---函数里面要执行的代码块
}
函数创建 --
第一种创建函数的方式 (- 具名函数 ---函数声明)
function 函数名(参数1,参数2){
函数体
}
第二种创建函数的方式 函数表达式 -- 匿名函数
var fun = function (参数1,参数2){
函数体
}
第三种创建函数的方式,不常用。了解
var fun1 = new Function('a','b','alert(a*b)');
fun1(3,4);
函数的参数
// 形参 ---- 定义函数写在() 里面
// 实参 ----- 函数调用的时候 写在()里面并且会传给形参的
// 一般情况下, 形参和实参是一一对应, 函数调用的时候会把实参传递给形参
形参 --函数创建的时候
实参 —函数调用的时候
形参和实参一一对应
实参大于形参-----
arguments 对象 ---创建了函数,arguments存在,arguments里面存的是所有的实参;
arguments[0] 第一个实参
arguments[1] 第二个实参
return的作用
// 默认情况下,函数的返回值是undefined // return
1.函数的返回值 2.终止当前函数的运行
变量的作用域
变量的作用域:变量的作用范围 —全局作用域与函数作用域
全局变量:全局变量就是定义在函数外部的变量,在当前文件内有效
局部变量:局部变量就是定义在函数内部的变量,这个变量只能在函数内部使用
js的预解析
预解析的顺序是从上到下,函数的优先级高于变量,函数声明提前到当前作用域最顶端,在var之上。
函数执行的时候,函数内部才会进行预解析,如果有参数,先给实参赋值再进行函数内部的预解析。
1.遇到 var function 先存到内存中,赋值undefined 全局变量a 全局函数fun1 ---在fun1里面存局部变量
2.赋值
函数提升与变量提升
当js中函数或变量在未声明之前使用,
那么函数或变量的声明将被提升到当前作用域的最顶部, 这就叫变量提升。
函数的生命周期:函数运行结束--函数以及里面的变量被js的垃圾回收机制回收了
代码的执行顺序 :代码从上到下执行--函数只有在调用的时候才会执行
数组定义
数组:Array 对象用于在单个的变量中存储多个值,用来存储多组数据的容器(变量);
数组一般是由中括号包裹,元素之间使用逗号分隔,数组的长度也就是数组中元素的个数使用length获取,数组中具有索引下标,它们是
从0开始的,通过对应的索引下标可以取到元素中对应的值。
数组中的元素可以是js中任意数据类型的值
当数组对象指定长度时,我们也可以存储多余这个长度的元素
数组的创建方式:
1. 使用字面量的方式创建 var arr = [10,20.30,true,"Hello",new Date(),function(){},[12,12,34],Math.random(),null,undefined]
2. 使用new关键字来创建一个对象 var arr = new Array(12,34,"hello")
var arr = new Array(5);
数组常用方法
push() 向数组的末尾添加一个或更多元素,并返回新的数组长度。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度shift() 删除并返回数组的第一个元素。 //无参数 pop() 删除数组的最后一个元素并返回删除的元素。 // 无参数 splice() 从数组中添加或删除元素 或者替换元素 参数1: 下标 参数2: 数量 参数3...4...5 添加的元素 // 返回的是删除的元素---数组
注意:添加和删除的方法,改变了原数组的长度和元素
concat() 拼接一个或多个数组;返回拼接后的数组
join() 根据指定的分隔符(seperator)进行切割,返回一个字符串,参数缺省以逗号作为分隔符 (数组连接成字符串)
slice() 选取数组的的一部分,并返回一个新数组 获取数组中部分元素并返回: 不会影响原数组(截取)
// 以上三个方法不会影响原数组
与索引相关的方法:
indexOf() 匹配要查找的元素在数组中第一次出现的索引位置 ,array.indexOf(item,start)
lastIndexOf() 匹配要查找的元素在数组中最后一次出现的索引位置
注意:以上两个方法去查找元素,如果找不到,返回-1
// 第二个参数默认省略, 如果有,下标
//不会影响原数组
reverse() 反转数组的元素顺序 ; 改变了原数组的顺序 (原来的数组发生变化)
sort() //排序 — 影响原数组 默认升序
数组检测
- instanceof arr instanceof Array
2. isArray() Array.isArray(arr)
// 如果是数组返回结果是true ,否则false
冒泡排序
var arr = [3456, 6, 777, 32, 5, 342, 67, 344]
// 总共比较多少次
for (var j = 0; j < arr.length; j++) {
// 里层循环每轮比较次数
for (var i = 0; i < arr.length; i++) {
if (arr[i] > arr[i + 1]) {
var tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
console.log(arr);