【前端】3、JavaScript

3. JavaScript

3.1 JavaScript 变量及数据结构

3.1.1 变量的命名规范

1、变量名必须是数字、字母、下划线、$这四种字符组成。
2、变量名的首字符不能是数字。
3、变量名区分大小写,如:var a; 与 var A; 是两个不同的变量。
4、变量名不能是 JavaScript 的保留字。如:function、var、return…
5、变量名尽量做到望文生义,如:var name = ‘张三’;

img

3.1.2 变量的数据类型

JavaScript 的数据类型如下:
1、string 类型,代表字符串类型,可以是单引号或双引号。
2、number 类型,代表各种数字(代表整数和小数)。
3、object 类型,代表所有的对象类型。
4、Array 类型,代表所有的数组类型。
5、undefined 类型,代表未声明的类型。
6、boolean 类型,代表布尔类型,可以取值 true 或 false,一般非 0 即为 true,
‘’ null undefined false 0 isNaN 等都为 false
7、function 类型,代表函数类型。

3.1.3 通过不同的方法查看变量的类型
var a = 10;
var a1 = 1.1;
var s = "hello";
var ss = null;
var b = true;
var arr = [];
function test() {}

// 查看变量类型方法一:typeof [重点掌握]
// typeof: 查看变量的数据类型,使用较多,一般不能查看详细类型
console.log("a的变量类型:" + typeof a); // number
console.log("a1的变量类型:" + typeof a1); // number
console.log("s的变量类型:" + typeof s); // string
console.log("m的变量类型:" + typeof m); // undefined
console.log("ss的变量类型:" + typeof ss); // object
console.log("b的变量类型:" + typeof b); // boolean
console.log("test的变量类型:" + typeof test); // function
console.log("arr的变量类型:" + typeof arr); // object
console.log("--------------------------------------------");
// 查看变量类型方法二:Object.prototype.toString.call(变量名) [了解]
console.log("ss的变量类型:" + Object.prototype.toString.call(ss)); // [object Null]
console.log("arr的变量类型:" + Object.prototype.toString.call(arr)); // [object Array]
console.log("--------------------------------------------");
// 查看变量类型方法三:变量名.constructor [了解]
console.log("arr的变量类型:" + arr.constructor); // function Array() { [native code] }
console.log("a的变量类型:" + a.constructor); // function Number() { [native code] }

img

3.2 JavaScript 数据类型间的转换

3.2.1 Number 与字符串之间的转换
// 1、Number 类型与字符串之间的转换:
// 1.1、Number -> string
var n = 10;
console.log("n = " + typeof (n + ""));

// 1.2、string -> Number
// 转换方法一:使用 Number()函数完成转换:
var str = "123aa"; // 遇到第一个非数值型字符就停止转换
var str1 = Number(str); // 返回NaN
console.log("str = " + (str1 + 1));
// 缺点:如果字符串中有一个是非数字字符,则转换失败,返回 NaN(not a number)

// 转换方法二(整数):使用 parseInt() 函数完成转换: [只能转换整数]
/* 
 参数 2 :可以指定进制数,代表待转换的数字的进制,
 如:这里的 8 ,代表将需转换的数字 123 当作 8 进制进行转换,返回的是转换后的 10 进制结果。
 */
str = parseInt(str, 8);
console.log("str(parseInt) = " + (str + 1));
console.log("----------------------------------------------");

// 转换方法二 ( 小数 ) :使用 parseFloat() 函数完成转换: [只能转换小数]
var aa = "1.234";
console.log("aa(parseFloat) = " + parseFloat(aa));

img

3.2.2 布尔类型的转换
// 2.1 一些特殊的数值将被js转换为false
var a = 0;
var b = "";
var c = undefined;
var d = null;
var e = NaN;

// 装换方式一:Boolean()
console.log("a转换为布尔类型:" + Boolean(a));
console.log("b转换为布尔类型:" + Boolean(b));
console.log("c转换为布尔类型:" + Boolean(c));
console.log("d转换为布尔类型:" + Boolean(d));
console.log("e转换为布尔类型:" + Boolean(e));
console.log("--------------------------------------");

// 转换方法二:!! (常用在js开发的一些框架底层源码中)
console.log("a转换为布尔类型:" + !!a);
console.log("b转换为布尔类型:" + !!b);
console.log("c转换为布尔类型:" + !!c);
console.log("d转换为布尔类型:" + !!d);
console.log("e转换为布尔类型:" + !!e);
console.log("--------------------------------------");

// 2.2 一些非零值被转换为true
var f = "abc";
var g = 1.234;
console.log("f转换为布尔类型:" + !!f);
console.log("g转换为布尔类型:" + !!g);

img

3.3 JavaScript 各种运算符

3.3.1 算术运算符
3.3.1.1 双目运算符
// 1.1 双目运算符: (+ - * / %)
var a = 10;
var b = 3;
console.log("a + b = " + (a + b));
console.log("a - b = " + (a - b));
console.log("a * b = " + a * b);
console.log("a / b = " + a / b);
console.log("a % b = " + (a % b));

img

3.3.1.2 单目运算符
// 1.2 单目运算符:(++ --)
var aa = 1;

// 1.2.1 ++ 运算符:
// 1.2.1.1 前加
// 情况一:单独使用时
++aa; // 相当于: ① aa = aa + 1;
console.log("aa = " + aa);
// 情况二:与表达式一起使用时
var bb = ++aa; // 相当于: ① aa = aa + 1; ② bb = aa;
console.log("aa = " + aa + ",bb = " + bb);

// 1.2.1.2 后加
// 情况一:单独使用时
aa++; // 相当于: ① aa = aa + 1;
console.log("aa = " + aa);
// 情况二:与表达式一起使用时
bb = aa++; // 相当于: ① bb = aa;② aa = aa +1;
console.log("aa = " + aa + ",bb = " + bb);

// 1.2.2 -- 运算符:
// 1.2.2.1 前减
// 情况一:单独使用时
--aa; // 相当于: aa = aa - 1;
console.log("aa = " + aa);
// 情况二:与表达式一起使用时
bb = --aa; // 相当于: ① aa = aa - 1;② bb = aa;
console.log("aa = " + aa + ",bb = " + bb);

// 1.2.2.2 后减
// 情况一:单独使用时
aa--; // 相当于: aa = aa - 1;
console.log("aa = " + aa);
// 情况二:与表达式一起使用时
bb = aa--; // 相当于: ① bb = aa; ② aa = aa - 1;
console.log("aa = " + aa + ",bb = " + bb);

img

3.3.2 关系运算符
// 关系运算符 (> >= < <= == != === !==)
var a = 10;
var b = 5;
var c = "10";
console.log("a > b 结果:" + (a > b));
console.log("a < b 结果:" + (a < b));
console.log("a == b 结果:" + (a == b));
console.log("a != b 结果:" + (a != b));
console.log("a == c 结果:" + (a == c));
console.log("a === c 结果:" + (a === c));

img

面试题:== 与 === 之间的区别

前者是将两个数据转换为同一个数据类型,再比较内容是否相等。而后者是先比较类型是否相等,如果不相等就停止比较,如果相等再比较内容。所以,后者性能更高。

3.3.3 逻辑运算符

3.3.3.1 && 运算符的用法

// 1. && 的用法:
// 情况一:一般用法 , 只有所有参与运算的表达式都为真,整个结果才为真。
var a = 10;
var b = 5;
var c = 18;
var d = 20;
var f = a > b && c > d; // 返回 false, 第一个表达式为 true, 第二个为 false
console.log("f = " + f);

// 情况二:短路用法,当参与运算的表达式中有一个返回 false,其后的表达式不再执行。
f = a++ < --b && ++c > d--;
console.log("a = " + a + ",b = " + b + ",c = " + c + ",d = " + d);

img

3.3.3.2 || 运算符的用法

// 2. || 的用法
// 情况一:一般用法,只有所有参与运算的表达式都为 false ,整个结果才为 false
// 只要有一个为 true, 整个表达式返回 true
f = a > b || c > d;
console.log("f = " + f);

// 情况二:短路,当参与运算的表达式中有一个返回 true, 其后的表达式就不再执行。
f = a++ < --b || ++c > d--;
console.log(
    "a = " + a + ",b = " + b + ",c = " + c + ",d = " + d + ",f = " + f
);

img

3.4 JavaScript 条件结构

3.4.1 if 条件结构
//if 条件结构:
//1 )简单 if
var a = 10;
if (a > 10) {
    console.log("a > 10");
}

//2 )if...else 结构:
if (a > 10) {
    console.log("a > 10");
} else {
    console.log("a <= 10");
}

//3 )if...else if ....else if ...else... 多重 if 结构
// 案例:根据成绩打印评语。
var score = 83;
if (score > 90) {
    console.log("优秀.");
} else if (score > 80) {
    console.log("良好");
} else if (score > 70) {
    console.log("一般");
} else if (score > 60) {
    console.log("及格");
} else {
    console.log("不及格");
}

img

3.4.2 switch…case 结构
// 案例:根据输入的月份数打印天数
var month = 5;
var day = -1; // 代表某个月的天数
switch (month) {
    // 情况一:带有 31 天的月份为: 1 3 5 7 8 10 12
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        day = 31;
        break;
    // 情况二:带有 30 天的月份为: 4 6 9 11
    case 4:
    case 6:
    case 9:
    case 11:
        day = 30;
        break;
        // 情况三:带有 28 天的月份为: 2
    case 2:
        day = 28;
        break;
}
console.log(month + "月总共有:" + day + "天!");

img

3.4.3 三元运算符
var aa = "hello";
console.log(aa === "hello" ? " 成立 " : " 不成立 ");

// 案例:根据输入的三个数字,找出其中的最大值?
var a = 10,
    b = 15,
    c = 2;
// 方法一:
var max1 = a > b ? a : b;
var max = max1 > c ? max1 : c;
console.log("max = " + max);
console.log("------------------------------------");
// 方法二:
var maxx = (a > b ? a : b) > c ? (a > b ? a : b) : c;
console.log("maxx = " + maxx);

img

3.5 JavaScript 循环结构

3.5.1 while 循环
.t {
    display: inline-block;
    width: 40px;
    height: 30px;
    margin-right: 5px;
    margin-bottom: 5px;
    background: darkblue;
    color: white;
    text-align: center;
    line-height: 30px;
}
// 案例一:打印 1-100 之间所有数字之和
var i = 1; //① 循环变量
var sum = 0; // 存放累加求和的变量
while (i <= 100) {
    //② 循环条件
    sum += i;
    i++; //③ 循环变量的修改
}
console.log("sum = " + sum);
console.log("----------------------------------------");

// 案例二:输出 1-100 之间个位数为 3 并且每 5 个一换行
// 分析: ① 个位数是 3 , i % 10 == 3 ,
//        ② 每五个一换行需要一个计数器
var n = 1; // 代表个位数是 3 的数字的个数
var j = 1;
document.write("1-100 之间个位数为 3 的数字如下:<hr>");
while (j <= 100) {
    if (j % 10 == 3) {
        // 代表个位数为 3
        document.write("<span class='t'>" + j + "</span>");
        if (n++ % 5 == 0) {
            document.write("<br>");
        }
    }
    j++;
}

img

img

3.5.2 do…while 循环
// 案例:寻找 1~1000 之内,所有能被 5 整除、或者能被 6 整除的数字 , 每 20 个一换行。
var i = 1;
var n = 1;
do {
    if (i % 5 == 0 || i % 6 == 0) {
        document.write("<span class=t>" + i + "</span>");
        if (n++ % 20 == 0) {
            document.write("<br>");
        }
    }
    i++;
} while (i <= 1000);

img

3.5.3 for 循环
//  案例一:编写程序 求 求 1-3+5-7+....-99+101  的值
// 分析:此题也看作是累加求和,不过每个数字前面有一个符号,
// 这个符号前的字符是 + - 交替变化的。
var sum = 0; // 定义存放求和结果的变量
var flag = 1; // 代表符号
var n = 1;
for (var i = 1; i <= 101; i += 2) {
    if (n++ % 2 == 0) {
        flag = -1;
    }
    sum += flag * i;
    flag = 1;
}
console.log("sum = " + sum);

img

//  案例二:用for循环,输入10个整数,输出最大值
var aa = prompt("请输入第 1 个整数:");
var max = parseInt(aa); // 代表输入的 10 个整数中的最大值
for (var i = 1; i <= 9; i++) {
    aa = parseInt(prompt("请输入第" + (i + 1) + "个整数:"));
    if (aa > max) {
        max = aa;
    }
}
console.log("10 个整数中最大值为:" + max);

img

3.5.4 for…in 循环
// 用法一:遍历数组
var aa = [1, 2, 3, 4, 5, 6];
for (var i in aa) {
    console.log(aa[i] + " ");
}

console.log("---------------------------------------");

// 用法二:遍历对象
for (var i in document) {
    console.log(i);
}

img

3.6 JavaScript 数组

3.6.1 数组的基本用法
// 定义一个数组
// 方法一:数组直接量或数组字面量定义数组
var arr = [2, 3, 4, 6];
// 方法二:使用数组的构造函数定义
var arr1 = new Array(2); // 此时,只有一个参数代表数组的长度为 2
var arr2 = new Array(2, 3, 4); // 此时,代表定义了个三个元素的数组

// 为数组赋值
arr[5] = 123;
arr[6] = "abc";
console.log("arr.length: " + arr.length);
arr[arr.length] = 45;
arr[arr.length] = 456;

// 遍历数组元素
for (var i in arr) {
    console.log(arr[i]);
}

img

注意:
1、JS 数组与 java 或C语言区别, JS 的数组长度是变化的,而 java 的长度是固定的。
2、JS 数组中的数据类型可以不一样,但 java 必须一样,但一般我们在 JS 中使用时也定义一样的类型。

3.6.2 与数组相关的API
// 数组的常用API
function text() {
    // 1、定义一个数组
    let arr1 = new Array(2); // 如果只有一个元素,代表的是数组的长度
    console.log("arr1.length:", arr1.length, arr1[0]); // arr1.length: 2 undefined

    // 2、使用[]直接声明数组
    let arr2 = [1, 2, 3, 4, 5, 6];
    console.log(arr2[0], arr2[1], arr2[2]); // 1 2 3

    // 3、向数组中添加元素
    // 添加元素到数组的未尾
    arr2.push(100);
    // 添加元素在数组的头部
    arr2.unshift(200);
    // 从数组头部移走一个元素
    arr2.shift();
    //(重点) 参数1:代表要删除的索引位置 参数2:代表要删除元素的个数
    arr2.splice(5, 2);
    //(重点) 参数1:开始截取的位置 参数2:截取到的位置(不包含)
    let arr3 = arr2.slice(2, 5);
    // 找出某个元素在数组中第一次出现的位置
    let index = arr2.indexOf(2);
    // 找出某个元素在数组中最后一次出现的位置
    let lastIndex = arr2.lastIndexOf(2);
    // 判断在数组中是否包含指定元素
    let includes = arr2.includes(3);
    // 定义排序规则,返回值是一个整数,如果是负数升序,正数降序,类似于java的Comparator接口
    // arr2.sort(function (a, b) {
    //   return b - a;
    // });
    // 相当于: 箭头函数
    // a - b: 升序 b - a: 降序
    arr2.sort((a, b) => a - b);

    console.log("index:", index);
    console.log("lastIndex:", lastIndex);
    console.log("includes:", includes);
    console.log("arr3:", arr3);
    console.log("arr2:", arr2);

    console.log("------------------------------------");

    // 4、扩展
    // 案例一: 将指定数组中的每个元素的值乘以2
    // map: 可以修改原数组中的每个元素
    let arr4 = arr2.map((a) => a * 2);
    console.log(arr4);

    // 案例二: 可以筛选出原数组中的偶数
    // js中:===首先比较类型再比较内容是否相等,而==只比较内容是否相等
    let arr5 = arr2.filter((f) => f % 2 === 0);
    console.log("arr5:", arr5);

    // 案例三:将上次的值与当前值进行累加运算
    // P: 代表上次值 c:  当前值, 0: 初始值
    let sum = arr5.reduce((p, c) => p + c, 0);
    let fax = arr5.reduce((p, c) => p * c, 1);
    console.log("sum:", sum);
    console.log("fax:", fax);
}
text();

// 扩展数组方法:Array.prototype.自己定义的扩展方法名 = function(){ 方法实现 }
Array.prototype.sayHello = function () {
    console.log("数组元素如下:");
    console.log("----------------------------");
    for (let i = 0; i < this.length; i++) {
        console.log(this[i] + " ");
    }
    console.log("----------------------------");
};
let arr = [1, 2, 3, 14];
arr.sayHello();
3.6.3 在数组中查找元素
// 在数组中查找元素
var arr = [4, 5, 1, 67, 90, 2];
var e = 67; // 代表要查找的数组元素
// 在数组中查找元素,遍历数组再比较从而找到元素
for (var i = 0; i < arr.length; i++) {
    if (arr[i] == e) {
        document.write("在位置" + i + "处找到了元素" + e + "!");
        break;
    }
}
console.log(i);
if (i == arr.length) {
    document.write("没有找到元素" + e + "!");
}

image-20240801143319175

3.7 JavaScript 内置对象

2.7.1 Math 对象的用法
// 数学对象的用法
function test() {
    // 1、圆周率
    let pi = Math.PI;
    // 2、求绝对值
    let abs = Math.abs(-10);
    // 3、求n次幂
    let pow = Math.pow(2, 3);
    // 4、返回指定数的平方根
    let sqrt = Math.sqrt(2);
    // 5、最小值
    let min = Math.min(1, 2);
    // 6、最大值
    let max = Math.max(1, 3);
    // 7、比指定数要大的最小整数
    let ceil = Math.ceil(3.13);
    // 8、比指定数要小的最大整数
    let floor = Math.floor(3.13);
    // 9、产生一个[0,1)随机小数
    let rand = Math.random();
    // 10、求四舍五入,加0.5取整
    let round = Math.round(3.455);
    // 11、正弦值
    console.log("pi:", pi);
    let sin = Math.sin(Math.PI / 3);
    
    console.log("abs:", abs);
    console.log("pow:", pow);
    console.log("sqrt:", sqrt);
    console.log("min:", min);
    console.log("max:", max);
    console.log("ceil:", ceil);
    console.log("floor:", floor);
    console.log("rand:", rand);
    console.log("round:", round);
    console.log("sin:", sin);
}

image-20240801144043254

2.7.2 String 对象的用法
// 字符串函数用法
function test() {
    // 定义一个字符串
    let str = "hello,world";
    // 字符串长度
    let len = str.length;
    // 返回指定位置字符
    let charAt = str.charAt(0);
    // 返回某个字符第一次出现的位置
    let indexOf = str.indexOf("o");
    // 返回某个字符最后一次出现的位置
    let lastIndexOf = str.lastIndexOf("o");
    // 转换为大写形式
    let toUpperCase = str.toUpperCase();
    // 转换为小写形式
    let toLowerCase = str.toLowerCase();
    // 替换指定字符
    let replace = str.replace("o", "O");
    // 以指定字符开头
    let startWith = str.startsWith("he");
    // 以指定字符串结束
    let endWith = str.endsWith("abc");
    // 是否包含指定字符串,java中叫contains()
    let includes = str.includes("wor");
    // 按照指定字符拆分字符串
    let split = str.split(",");
    // 截取开始到结束位置的字符串,左闭右开区间
    let substring = str.substring(6, str.length);
    // 参数1:从指定位置开始截取 参数2:截取的字符个数
    let substr = str.substr(6, 5);

    console.log("len:", len);
    console.log("charAt:", charAt);
    console.log("indexOf:", indexOf);
    console.log("lastIndexOf:", lastIndexOf);
    console.log("toUpperCase:", toUpperCase);
    console.log("toLowerCase:", toLowerCase);
    console.log("replace:", replace);
    console.log("startWith:", startWith);
    console.log("endWith:", endWith);
    console.log("includes:", includes);
    console.log("split:", split);
    console.log("substring:", substring);
    console.log("substr:", substr);
}

image-20240801144609675

2.7.3 Date 对象的用法
<body>
    <div id="d1"></div>
    <div id="d2"></div>
</body>
div{
    background-color: darkblue;
    color:lightyellow;
    padding:2px 8px;
    margin-bottom: 10px;
}
// js日期对象用法
function test() {
    // 第一部分:组装时间
    // 1. 构造一个日期对象
    let dt = new Date()
    // let dt = Date.now()      // 得到日期的毫秒值
    // let myDate = new Date(dt)
    // 2. 得到日期的各个部分
    let year = dt.getFullYear()
    let month = dt.getMonth() + 1   // 从0开始计算的
    let date = dt.getDate()
    let hour = dt.getHours()
    let minute = dt.getMinutes()
    let seconds = dt.getSeconds()
    // 3. 得到星期数
    let weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
    let index = dt.getDay()    // 星期几
    let weeName = weeks[index] // 星期名称
    //3. 组装成日期
    let info = year + "年" + month + "月" + date + "日 " + hour + ":" + minute + ":" + seconds + "  " + weeName
    console.log("当前时间:",info)

    // 第二部分:将日期显示在div层中
    document.querySelector("#d1").innerHTML = info

    // 第三部分:让时间动起来
    // 第一种方法:
    // setTimeout(function(){
    //     test()
    // },1000)     // 代表每隔一秒调用test()函数
}
// window.onload = test;

// 第二种方法:
// onload: 代表页面元素都加载完毕后,才执行的事件处理函数
window.onload = function(){
    test()
    // 第二种方法:只用调用一次
    setInterval(test,1000)    // 只调用一次即可
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生146

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值