(1)编程:
(2)计算机程序:
(3)计算机语言
(4)翻译器
(5)编程语言和标记语言区别
(6)解释型语言和编译型语言
(7)总结
(8)程序运行,计算机运行软件的过程:
(9) 关键字和保留字
(1)JavaScript :是一种运行在客户端的脚本语言 (Script 是脚本的意思)
(2) JavaScript的作用:
(3)HTML/CSS/JS 的关系
HTML/CSS 标记语言–描述类语言
JS 脚本语言–编程类语言
(4)浏览器执行 JS
浏览器分成两部分:渲染引擎和 JS 引擎
(5)JS 的组成:ECMAScript、DOM、BOM
(6)JS 有3种书写位置,分别为行内、内嵌和外部。
<input type="button" value="Hello World" onclick="alert('Hello World')" />
<script>
alert('Hello World~!');
</script>
<script src="my.js"></script>
(7)JavaScript输入输出语句
(1)概念:变量是用于存放数据的容器。 我们通过 变量名 获取数据,甚至数据可以修改。
(2)在内存中的存储,本质:变量是程序在内存中申请的一块用来存放数据的空间。类似酒店的房间,一个房间就可以看做是一个变量。
(3)使用:声明 、赋值
变量的声明
var age; // 声明一个 名称为age 的变量
变量的赋值
age = 10; // 给 age 这个变量赋值为 10
(4)语法扩展
var age = 18;
age = 81; // 最后的结果就是81因为18 被覆盖掉了
var age = 10, name = 'zs', sex = 2;
(1)简介
2)字符串型 String
3)布尔型Boolean
4)Undefined和 Null
var variable;
console.log(variable); // undefined
console.log('你好' + variable); // 你好undefined
console.log(11 + variable); // NaN
console.log(true + variable); // NaN
var vari = null;
console.log('你好' + vari); // 你好null
console.log(11 + vari); // 11
console.log(true + vari); // 1
(3)获取变量数据类型
(4)数据类型转换
(1)是用于实现赋值、比较和执行算数运算等功能的符号
(2)JS中常用的运算符有:算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符
2.3.1 算数运算符
(1)算术运算使用的符号,用于执行两个变量或值的算术运算。+ 、 - 、* 、/ 、%(取余数,如7%3=1)
(2)注意浮点数的精度问题,浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。不要直接判断两个浮点数是否相等 !
(3)表达式和返回值
2.3.2 递增和递减运算符
(1)如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减( - - )运算符来完成。
(2)在 JS 中,递增(++)和递减( – )既可以放在变量前面,也可以放在变量后面。
2.3.3 比较运算符
(1)比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true / false)作为比较运算的结果。
2.3.4 逻辑运算符
(1)逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。后面开发中经常用于多个条件的判断, && 、|| 、!
(2)短路运算(逻辑中断)
2.3.5 赋值运算符
(1)用来把数据赋值给变量的运算符。
(1)在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能,即流程控制就是来控制代码按照一定结构顺序来执行
(2)流程控制主要有三种结构:顺序结构、分支结构和循环结构,代表三种代码执行的顺序。
(3)顺序流程控制:程序会按照代码的先后顺序,依次执行
(4) 分支流程控制:由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
表达式1 ? 表达式2 : 表达式3;
(5)循环
1、打印n行n列的星星
var rows = prompt('请您输入行数:');
var cols = prompt('请您输入列数:');
var str = '';
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
str = str + '★';
}
str += '\n';
}
console.log(str);
2、打印倒三角形案例
var str = '';
for (var i = 1; i <= 10; i++) { // 外层循环控制行数
for (var j = i; j <= 10; j++) { // 里层循环打印的个数不一样 j = i
str = str + '★';
}
str += '\n';
}
console.log(str);
(1)数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。
(2)创建数组(JS)
var 数组名 = new Array() ;
var 数组名 = [];
(3)获取数组中的元素
(4)遍历数组
arr.length
动态监测数组元素的个数(5)数组中新增元素
数组[ 数组.length ] = 新数据;
, length 属性是可读写的(6)示例
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
// 刚开始 newArr.length 就是 0
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= 10) {
// 新数组索引号应该从0开始 依次递增
newArr[newArr.length] = arr[i]; // 或 newArr.push(arr[i]);
}
}
console.log(newArr);
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
newArr[newArr.length] = arr[i];
}
}
console.log(newArr);
var arr = ['red', 'green', 'blue', 'pink', 'purple', 'hotpink'];
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i]
}
console.log(newArr);
var arr = [4, 1, 2, 3, 5];
for (var i = 0; i <= arr.length - 1; i++) { // 外层循环管趟数
for (var j = 0; j <= arr.length - i - 1; j++) { // 里面的循环管 每一趟的交换次数
// 内部交换2个变量的值 前一个和后面一个数组元素相比较
if (arr[j] < arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
(1)函数:封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。
(2) 函数的使用:声明函数、调用函数
// 声明函数
function 函数名(形参) {
//函数体代码
}
// 调用函数
函数名(实参); // 通过调用函数名来执行函数体代码
(3)函数的封装:函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
(4)函数的参数:形参、实参
(5)函数的返回值:return 语句
(6)arguments的使用:
(7)函数内部可以调用另一个函数,在同一作用域代码中,函数名即代表封装的操作,使用函数名加括号即可以将封装的操作执行。
(8)函数的两种声明方式
声明定义方式
function fn() {...}
调用,调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面
fn();
var fn = function(){...};
函数调用必须写到函数体下面
fn();
(1)通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
(2)JS(es6前)中的作用域有两种:全局作用域、局部作用域(函数作用域)
(3) 变量的作用域:全局变量、局部变量
var a=b=c=10;
,即var a=10; b=10; c=10
,则a为局部变量,b、c为全局变量(4)作用域链:根据在**[内部函数可以访问外部函数变量]**的这种机制,用链式查找决定哪些数据能被内部函数访问
(5)预解析
(1)在 JS中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。对象是由属性和方法组成的。
(2)为什么需要对象:为了让更好地存储一组数据,对象中为每项数据设置了属性名称,可以访问数据更语义化,数据结构清晰,表意明显,方便开发者使用。
(3)创建对象的三种方式: 利用字面量创建对象 、利用 new Object 创建对象、利用构造函数创建对象
1、利用**字面量**创建对象
var obj = {
属性名:属性值,
方法名:function() {} //匿名函数
};
2、利用 **new Object** 创建对象
var obj = new Object();
obj.属性名 = 属性值;
obj.方法名:方法名:function() {}
此时obj 变量已经保存了创建出来的空对象
3、利用**构造函数**创建对象
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
(4)对象的使用
(5) 变量、属性、函数、方法的区别
1.变量和属性的相同点 他们都是用来存储数据的
(6)遍历对象:for…in 语句用于对数组或者对象的属性进行循环操作。
for (变量 in 对象名字) {
// 在此执行代码
}
for (var k in obj) {
console.log(k); // k 属性名
console.log(obj[k]); // obj[k] 属性值
}
(1)JS中的对象分为3种:自定义对象 、内置对象、 浏览器对象
(2)Math对象
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
(3)日期对象
1、获取当前时间必须实例化
var now = new Date();
2、获取指定时间的日期对象
var future = new Date('2021/3/16');
注意:如果创建实例时并未传入参数,则得到的日期对象是当前时间对应的日期对象
实例化Date对象
var now = new Date();
1. 用于获取对象的原始值
console.log(date.valueOf())
console.log(date.getTime())
2. 简单写可以这么做
var now = + new Date();
3. HTML5中提供的方法,有兼容性问题
var now = Date.now();
// 1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
// 2.用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
// 3.把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)
// 转换公式如下:
// d = parseInt(总秒数/ 60/60 /24); // 计算天数
// h = parseInt(总秒数/ 60/60 %24) // 计算小时
// m = parseInt(总秒数 /60 %60 ); // 计算分数
// s = parseInt(总秒数%60); // 计算当前秒数
function countDown(time) {
var nowTime = +new Date(); // 返回的是当前时间总的毫秒数
var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数
var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数
var d = parseInt(times / 60 / 60 / 24); // 天
d = d < 10 ? '0' + d : d;
var h = parseInt(times / 60 / 60 % 24); //时
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60); // 分
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60); // 当前的秒
s = s < 10 ? '0' + s : s;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2019-5-1 18:00:00'));
var date = new Date();
console.log(date);
(4)数组对象
字面量方式
var arr = [1,"test",true];
new Array()方式
var arr = new Array();
arr instanceof Array
Array.isArray(arr)
数组排序(冒泡排序)
var arr1 = [13, 4, 77, 1, 7];
arr1.sort(function(a, b) {
// return a - b; 升序的顺序排列
return b - a; // 降序的顺序排列
});
console.log(arr1);
(5)字符串对象
str.length
却可以执行,这是因为js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :// 1. 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2. 赋值给我们声明的字符变量
str = temp;
// 3. 销毁临时变量
temp = null;
示列:查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
var str = "oabcoefoxyozzopp";
var index = str.indexOf('o');
var num = 0;
// console.log(index);
while (index !== -1) {
console.log(index);
num++;
index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是: ' + num);
判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。
var str = 'abcoefoxyozzopp';
var o = {};
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); // chars 是 字符串的每一个字符
if (o[chars]) { // o[chars] 得到的是属性值
o[chars]++;
} else {
o[chars] = 1;
}
}
console.log(o);
// 2. 遍历对象
var max = 0;
var ch = '';
for (var k in o) {
// k 得到是 属性名
// o[k] 得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log(max);
console.log('最多的字符是' + ch);
replace()方法
replace() 方法用于在字符串中用一些字符替换另一些字符。
字符串.replace(被替换的字符串, 要替换为的字符串);
split()方法
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。字符串.split("分割字符")
(1)简单数据类型(基本数据类型、值类型):在存储时变量中存储的是值本身,包括string ,number,boolean,undefined,null
(2)复杂数据类型(引用类型):在存储时变量中存储的仅仅是地址(引用),通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等;
(3)堆栈
(4)简单类型传参
(5)复杂数据类型传参