一小时搞定JavaScript(1)——JS基础

news2024/11/27 0:32:50

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!!

文章目录

  • 1.基本语法
    • 1.1 JS语言的特点
    • 1.2 创建一个JS文件
    • 1.3 输入与输出
    • 1.4 变量
      • 1.4.1 命名规则
      • 1.4.2 变量声明
        • 数字类型
        • 字符串类型
        • 布尔类型
        • 未定义类型
      • 1.4.3 类型转换
        • 隐式转换
        • 显示转换
    • 1.4 运算符
      • 1.4.1 String常用的API方法
    • 1.5 控制语句
    • 1.6 循环结构
    • 1.7 断点调试技术
  • 2.函数应用
    • 2.1 函数声明
    • 2.2 匿名函数
    • 2.3 回调函数
    • 2.4 异步编程
  • 3.类与对象
    • 3.1 引用类型对象
      • 3.1.1 普通声明
      • 3.1.2 字变量声明
      • 3.1.3 构造函数
      • 3.1.4 访问方式
    • 3.2 原型概念
    • 3.3 面向对象和继承
      • 3.3.1 for-in遍历对象
  • 4.数组与集合
    • 4.1 数组的声明和遍历
      • 4.1.1 普通数组
      • 4.1.2 动态数组
    • 4.2 表的声明和遍历
      • 4.2.1 字符串和JSON数据的转换
      • 4.2.2 JSON对象和JS对象的总结
        • splice与slice的用法

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本篇文章会与java进行对比学习,因为JS中很多语法和java是相同的,所以大家最好熟悉Java语言后再来进行学习,效果更佳,见效更快.

1.基本语法

1.1 JS语言的特点

  • 是一门 动态弱类型的语言,没有非常强制的数据类型声明,都是通过let来声明对象
  • 作用是可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验.

1.2 创建一个JS文件

  1. 首先打开我们的IDEA软件,新建一个项目.
  2. 之后选中新建的项目,右键找到添加框架支持
  3. 按照下图新建一个Web应用程序

image-20240617144525008

如果你的右键菜单之后发现没有添加框架支持可以进行如下设置:

方法一:在设置中添加按钮;image-20240617144305986

方法二:选中项目,双击shift转到搜索,切换到操作进行搜索;

image-20240617144502334

分别解释一下不同包名的作用:

  • src文件夹添加java代码
  • web文件夹添加html代码

1.3 输入与输出

image-20240617144720099

JS输出:

  1. 后台输出:console.log("字符串")
  2. 在页面上打印:document.weite("字符串")
  3. 打印警告弹窗:alert("字符串")

JS输入:

  • prompt("字符串")

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        /*JS输出代码*/
        //后台输出
        console.log("字符串");
        //在页面上打印:`
        document.weite("字符串");
        //打印警告弹窗:
        alert("字符串");
        let s = prompt("字符串");
        document.write(s);
        
    </script>
</body>
</html>

小Tips:

alt+回车来生成变量

1.4 变量

1.4.1 命名规则

在Java中命名规则:

  1. 标识符可以包含:英文字母\数字\美元符号和下划线,并且不能以数字开头
  2. 标识符不能以数字开头
  3. 标识符不能是关键字

Java命名规范:

  1. 类名规范:首字母大写,后面每个单词首字母大写(大驼峰).(例如:Student)
  2. 方法名规范:首字母小写,后面每个单词首字母大写(小驼峰).(例如:getStudent)
  3. 变量名规范:全部小写.(例如:student)

在JS名命名规则中与java也是一致的

  1. 只能是字母\数字\美元符号eh下划线,并且不能以数字开头
  2. 字母区分大小写,例如 Age 和 age 就是不同的变量
  3. JS内部已占用的单词(关键字或保留字)不允许使用

1.4.2 变量声明

数字类型
  • 在JS中不管是什么类型,都是用let关键字来进行接收.
  • 如果想要看输出变量的类型使用typeof ___
let num =100;
console.log(typeof num);
字符串类型
  • 不管是单引号还是双引号都是字符串类型.
let A = "123";
let B = '123';
console.log(typeof A);
console.log(typeof B);

JS单引号和双引号的区别:

  • 当我们单独来描述一个字符串的时候,是没有区别的.

  • 当嵌套使用的时候,应该不同引号进行嵌套使用

let a=" '你好' ";
	//打印出来的就是 '你好'
let b=' "你好" ';
	//打印出来的就是 "你好"
console.log(a===b);
	//我们可以通过使a和b进行相等运算,看出这两个字符串是否相等
	//最终结果是false,说明他们两个不是一样的字符串
  • 转义写法

    如果想要在使用双引号的情况下输出的也是双引号,就需要使用转义字符.

    转义字符用\(右斜杠)表示

    let c= " \"你好"\ ";
    console.log(c);		//最后输出的就是"你好"
    
布尔类型

布尔类型于Java一致.

let is = true;
console.log(typeof is);
未定义类型

在JS中专门有一个未定义类型,就是针对那些声明了变量但是没有进行复制的数据.

let tmp;
console.log(typeof tmp);

1.4.3 类型转换

隐式转换

java中的隐式转换

  1. 数据类型之间的自动转换.
public class main{
    public static void main(Srting[]args){
        int i = 1;
        double j = 1.1;
        double res = i+j;
        System.out.println(res);
        //最后输出的是2.1,int变成了double类型进行运算
    }
}
  1. 数字类型自动转换成字符串类型
        String num1 = "123";
        int num2 = 3;
        System.out.println(num1+num2);
//最后输出的是 1233
  1. 字符串类型无法转换成数字类型
	System.out.println(num1-num2);
//这一段会报错,因为不能转换成数字类型

在JS中,

  1. 数值类型自动转换成字符串类型

  2. 字符串类型会自动转换成数值类型

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <script>
        let a=1;
        let b="222";
        document.write(a-b);
    	/*输出-221*/
        </script>
    </body>
    </html>
    

    在上面案例中可以看出来,最后的输出结果是-221,说明b变成了数值类型222进行运算,所以在JS中是可以将字符串类型自动转换成数值类型.

显示转换

java中的显示转换

在Java中的数据类型转换是通过在数值前面添加(转换类型)来实现的.

double num1 = 3.5;
int num2 = (int)num1;
//num1被强制转换成了int类型,该值由3.5->3

JS中的显示转换是通过数据类型(参数)的形式来进行转换.不过转换成字符串是一个特例,见下:

  1. 数值转换成字符串,通过.toString()方法来实现

  2. 字符串转换成数值

    let num = "100";
    let num2 = Number(num);
    console.log(typeof nume2);
    //最后的输出结果是number
    
  3. parse()关键字

    let num = 100.001;
    //转换成整数
    let num2 = parseInt(num);
    //转换成浮点数
    let num3 = parseFloa(num);
    document.write(num2,num3);
    	//最后打印出来的是 100 100.001
    

1.4 运算符

JS的运算符与java的运算符是一摸一样的

不同的在于比较运算符:

  • ==(双等号)表示判断值相等
  • ===(三等号)表示判断值数据类型相等

1.4.1 String常用的API方法

在Java中String常用的API方法

  • 判断字符串长度: .length()
  • 去空格: .trim()
  • 返回出现第一个字符所在下标索引值,找不到字符就返回-1: .indexOf("需要查找的字符")
  • 返回出现最后的一个字符所在下标索引值:.LastIndexOf("需要查找的字符")
  • 字符串是否包含元素: .contains("需要查找的字符")
  • 返回指定位置的单个字符: .charAt(位置)
  • 截取指定范围内字符串: .substring(开始位置,结束位置)
  • 字符串的比较: .equals(需要对比的数据)

image-20240617153401027

image-20240617153404204

JS中大致上与Java无差别,但是在length,includes,substing等上面由一点差别,具体见下:

image-20240617153452309

  • length变为了一个属性,而不是方法了,后面不需要加括号.
  • 去空格: .trim()
  • 返回出现第一个字符所在下标索引值,找不到字符就返回-1: .indexOf("需要查找的字符")
  • 返回出现最后的一个字符所在下标索引值:.LastIndexOf("需要查找的字符")
  • 字符串是否包含元素: .includes("需要查找的字符")
  • 返回指定位置的单个字符: .charAt(位置)
  • 截取指定范围内字符串: .substring(开始位置,结束位置)
  • 字符串的比较: 使用方法与JS运算符一致

1.5 控制语句

image-20240617152409001

  • JS语法分子语句中,if语句支持非布尔类型的判断.
if(1){
	document.write("支持非布尔类型判断");
}
  • 多分支语句与java多分支语句一摸一样
let a = "1";
switch(a){
	case 1:
		document.write("1");
		break;
	case 2:
		document.write("2");
		break;
	case 3:
		document.write("3");
		break;
	case 4:
		document.write("4");
		break;
}

1.6 循环结构

  • JS的循环结构与java是一致的.

1.7 断点调试技术

  • 同样与java语言一致.

2.函数应用

2.1 函数声明

  • 通过使用function关键字来实现,因为JS是没有参数类型这个概念的,所有声明方法的时候不需要返回值类型.

模板:

function 方法名(参数1,参数2){
	return参数1+参数2;
}

如果方法出现重名,后面的方法会把前面的方法覆盖了.

函数的内部内置了一个参数arguments,会自动或获取传递过来的参数

image-20240617172352731

2.2 匿名函数

  • 在JS中是可以直接把函数直接赋值给变量,没有方法名的方法就是匿名函数(函数表达式).

模板:

let sum = function(nmu1,nmu2){
	return nmu1+nmu2
}

2.3 回调函数

  • 在Java中没有回调函数这个概念,这个是JS特有的方法,但是它类似于Java中的接口.
  • 另外回调函数还有一个重要的作用就是可以实现异步操作.

模板:

function 方法1(方法2,参数1){
	if(参数1==1){
		方法2()	//这里就是回调函数
	}else{
		//别的方法
	}
}

方法1(方法2(){
	//定义方法2里面的方法
},参数2)

通过回调函数写一个数组排序案例:

let arr=[1,2,3,4,5,6];
arr.sort(function(o1,o2){
	return o2-o1;	//通过匿名函数来实现回调
})
document.write(arr);

2.4 异步编程

JS的异步操作是通过回调函数来实现的.

function f(fn){
	let num =10;
	setTimeout(function(){
		num+=10;
		fn(num);
	},1000);	//1秒钟后加10
}
let res = f(function(num){
	document.write(num);
});

前置知识

定时器setTimeout()

3.类与对象

3.1 引用类型对象

3.1.1 普通声明

通过给对象赋值来实现声明的方式;

模板:

let 对象名 = new Object();
	对象名.属性1 = A;
	对象名.属性2 = b;
	对象名.方法名 = function(){
		//定义一个方法
	}

image-20240617193409388

3.1.2 字变量声明

通过键值对的方式声明;

模板:

let 对象名 = {
	属性1:a,
	属性2:b,
	方法:function(){
		//定义方法
	}
}

image-20240617193456840

原则上来说,key的值是可加可以不加,但是当key的值是非法标识符的时候一定要添加双引号!!!

image-20240617195859629

3.1.3 构造函数

JS中的构造方法与Java当中的构造方法类似.在JS中我们可以通过构造方法中定义类的属性和方法;

模板:

function 方法名(属性1,属性2){
	this.属性1 = 属性1;
	this.属性2 = 属性2;
	this.方法1 = function(){
		//定义方法
	}
}

//调用构造方法
let 对象1 = new 方法名(参数1,参数2)

image-20240617193642530

3.1.4 访问方式

  1. 通过.的方式进行访问
  2. 通过[](中括号)进行对象的访问
    image-20240617195809129

3.2 原型概念

需要一个静态的区域来实现属性和方法的共享,目的就是为了节省内存空间.(类似于Java的静态static变量)

关键字.prototype

模板:

引用对象名字.prototype.原型变量名字 = 数量;
引用对象名字.prototype.原型方法名字 = function(){
	//定义原型方法
}

简写方式:

引用对象名字.protofype = {
	原型变量名字:100,
	原型方法名字:function(){
		//定义原型方法
	}
}

另外原型还有一个功能就是可以在原先的类里面扩展其他方法:

image-20240617195200655

3.3 面向对象和继承

在JS中也是没有一个严格定义的继承方法,但是我们可以模拟一个继承的概念

模板:

function 父类名(属性1,属性2){
	this.父类属性1=父类属性1;
	this.父类属性2=父类属性2;
	this.父类方法1 = function(){
		//定义父类方法
	}
}

//用构造函数来模拟一个子类
function 子类名(子类属性1){
	this.子类属性1 = 子类属性1;
	this.子类方法1 = function(){
		//定义子类方法
	}
}

//巧妙的通过原型类来实现一个原型链
子类名.prototype = new 父类名(参数1,参数2);

//通过创建一个对象来调用
let 子类对象名 = new 子类名(子类属性1);
子类对象名.子类方法1();
子类对象名.父类方法1();

案例: image-20240617195433555

3.3.1 for-in遍历对象

模板:

for(let key in 对象名){
	doucument.write(key+" "+对象名[key])
}

4.数组与集合

4.1 数组的声明和遍历

4.1.1 普通数组

声明一个固定长度的数组,声明方式与Java无区别.

模板:

let 数组名 = new Array(输入一个数值决定长度);
	//输入数组
	数组名[0]=1;
	数组名[1]=2;
	数组名[2]=3;

**for-of:**增强for循环

for(let 键 of 数组名){
	document.write(键);
}

4.1.2 动态数组

在JS中的动态数组就相当于Java中的ArrayList.

但是不同的是JS的动态数组只支持头插和尾插,下面是插入方法汇总:

  • .unshift("添加的元素")头插
  • .shift()头删
  • .push("添加的元素")尾插
  • .pop()尾删

image-20240617200404164

JS中的数组可以是任意类型的,不规整的都可以,例如:

let array=[
	11,
	"jack",
	null,
	undefined,
	new 0bject(),
	function(){console.log("haha")},
	[1,2,3]
];
for(let item of array){
	document.write(typeof item+" "+item);
}

4.2 表的声明和遍历

  • 在JS中并没有严格定义的表集合,与之比较相似的就是我们的JSON数据.
  • 通过[](中括号)进行拿值.

模板:

let 对象名 = {key1:值1,key2:key2~~~};
for(let key in 对象名){
	document.write(key+" "+对象[key]);
}

JSON对象集合

image-20240617201630140

4.2.1 字符串和JSON数据的转换

通过JSON.parse(对象名)来实现String类型转换成JSON数据

image-20240617201952369

通过.stringify(对象名)来实现JSON数据转换成String类型

image-20240617202141480

4.2.2 JSON对象和JS对象的总结

JSON对象本质是个字符串,主要作用就是传递数据,客户端拿到服务器的JSON格式数据字符串,先要转换成JS对象数据.

  • 属性必须要双引号(包括属性的属性).

  • 属性对应的值可以是nuLl、true/faLse、数字、字符串(必须双引号)、对象、数组.

    let json0bject='{' +
        '"id":1,' +
        '"name"' +
        '"flaq":ture,' +
        '"address":{id:1,area:"1001"}.' +
        '"course":[1,2,3]' +
    '}'
           
    let json0bject='{"id":1,"name""flaq":ture,"address":{id:1,area:"1001"}."course":[1,2,3]}'
    

无法通过JSON对象访问属性

image-20240617202603346

JS对象是一个真实的对象,有属性和方法.

splice与slice的用法

.splice(从哪里开始截,要截取的个数)拼接用法:截取后原数组会发生改变

  1. 截取功能

image-20240617203044510

  1. 截取后替换功能

.splice(从哪里开始截,要截取的个数,替换的新数据)

image-20240617203233622

  1. 增添功能

.splice(从哪里开始截,0,替换的新数据)

slice(从哪里开始截,要截取的个数)切片用法:截取后原来数组不发生改变

slice()也和splice用法一样,拥有截取功能\替换功能\增添功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html】如何利用id选择器实现主题切换

今天给大家介绍一种方法来实现主题切换的效果 效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

【Linux 12】进程控制

文章目录 &#x1f308; Ⅰ 进程创建01. fork 函数介绍02. 写时拷贝03. fork 常规用法04. fork 调用失败的原因 &#x1f308; Ⅱ 进程终止01. 进程退出场景02. 常见退出方法 &#x1f308; Ⅲ 进程等待01. 进程等待必要性02. 进程等待的方法2.1 wait 方法2.2 waitpid 方法 03.…

AI大模型浪潮席卷而来,你准备好乘风破浪成为行业翘楚了吗?

揭秘AI大模型浪潮&#xff1a;你准备好乘风破浪了吗&#xff1f; 在繁华的都市中&#xff0c;程序员小李一直默默耕耘在代码的海洋中。然而&#xff0c;随着AI大模型技术的迅猛发展&#xff0c;他发现自己仿佛置身于一场没有硝烟的战争中。身边的同事纷纷掌握了新技术&#xf…

AI绘图StableDiffusion最强大模型盘点 - 诸神乱战

玩了这么久的StableDiffusion&#xff0c;Civitai和HF上的各种大模型和LORA也都基本玩了个遍。 自己也一直想做一期盘点&#xff0c;选出我自己心中最好或者最有意思的那几个大模型。 毕竟每次看着模型库里几十个大模型&#xff0c;是个人都遭不住。 我在这篇文章中&#xf…

C++之模板(一)

1、为什么需要模板 将具有相同逻辑的一段代码提供一份模板&#xff0c;当我们需要处理不同类型的时候&#xff0c;可以通过数据类型当作参数来传递&#xff0c;从而实例化出对应类型的处理版本。 2、模板的定义 也是一种静态多态。 3、模板的分类 4、函数模板 5、函数模板的使…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代&#xff0c;知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域&#xff0c;如何高效管理和利用知识资源&#xff0c;成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

百货商场:打造品质生活

走进我们的百货商场&#xff0c;仿佛置身于一个五彩斑斓的梦幻世界。百货&#xff0c;不仅仅是购物的场所&#xff0c;更是一种品质生活的体验。 在这里&#xff0c;您可以找到最适合自己的商品选择。从家居用品到时尚服饰&#xff0c;从美食佳肴到美妆护肤&#xff0c;每一样商…

多态深度剖析

前言 继承是多态的基础&#xff0c; 如果对于继承的知识还不够了解&#xff0c; 可以去阅读上一篇文章 继承深度剖析 基本概念与定义 概念&#xff1a; 通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c; 当不同的对象去完成时会产生出不同的状…

数据资产入表-数据分级分类标准-数据分类

2021年9月1日&#xff0c;《中华人民共和国数据安全法》正式施行&#xff0c;明确规定“国家建立数据分类分级保护制度”&#xff0c;数据分级分类是数据安全管理的重要措施&#xff0c;它涉及到对数据资产的识别、分类和定级&#xff0c;是保障数据合规的前提。 数据分类&…

物联网主机 E6000 在智慧工地上的应用

随着科技的不断发展&#xff0c;智慧工地的概念逐渐普及。物联网技术的应用为工地管理带来了革命性的变化&#xff0c;物联网主机E6000作为一款领先的物联网主机设备&#xff0c;在智慧工地上发挥着重要作用。 物联网主机 E6000 是一种集成了多种传感器和通信技术的设备。支持融…

探秘提交任务到线程池后源码的执行流程

探秘提交任务到线程池后源码的执行流程 1、背景2、任务提交2、Worker线程获取任务执行流程3、Worker线程的退出时机1、背景 2、任务提交 线程池任务提交有两种方式,execute()和submit()。首先看一下execute方法的源码。我们发现它接收的入参是一个Runnable类型。我们按照代码…

小知识点快速总结:梯度爆炸和梯度消失的原理和解决方法

本系列文章只做简要总结&#xff0c;不详细说明原理和公式。 目录 1. 参考文章2. 反向梯度求导推导3. 具体分析3.1 梯度消失的原理3.2 梯度爆炸的原理 4. 解决方法 1. 参考文章 [1] shine-lee, "网络权重初始化方法总结&#xff08;上&#xff09;&#xff1a;梯度消失、…

NAND闪存市场彻底复苏

在全球内存市场逐渐走出阴霾、迎来复苏曙光之际&#xff0c;日本存储巨头铠侠&#xff08;Kioxia&#xff09;凭借敏锐的市场洞察力和及时的战略调整&#xff0c;成功实现了从生产紧缩到全面复苏的华丽转身。这一转变不仅彰显了企业在逆境中的生存智慧&#xff0c;也为全球半导…

C# Winform图形绘制

WinForms 应用程序中的控件是基于窗体的&#xff0c;当控件需要重绘时&#xff0c;它会向父窗体发送一个消息请求重绘。但是&#xff0c;控件本身并不直接处理绘制命令&#xff0c;所以你不能直接在控件上绘制图形。 解决方法&#xff1a; 重写控件的OnPaint方法使用CreateGr…

你能不能手敲出Spring框架?

Spring最成功的地方在于创始人Rod Johnson提出的IOC、AOP核心理念&#xff0c;反而不是其本身的技术。技术上今天可以有Spring春天&#xff0c;明天就可以有Autumn秋天。 核心理念有多重要&#xff1f;就如1871年巴黎公社的失败。公社在对抗法国zf和普鲁士占领军的背景下成立&…

[Python学习篇] Python字典

字典是一种可变的、无序的键值对&#xff08;key-value&#xff09;集合。字典在许多编程&#xff08;Java中的HashMap&#xff09;任务中非常有用&#xff0c;因为它们允许快速查找、添加和删除元素。字典使用花括号 {} 表示。字典是可变类型。 语法&#xff1a; 变量 {key1…

16.RedHat认证-Ansible自动化运维(中)

16.RedHat认证-Ansible自动化运维(中) 部署Ansible Ansible的Inventory文件 Inventory文件定义了ansible管理的主机&#xff0c;说白了就是Inventory文件中的内容是记录被管理的主机。 Inventory文件分为两种&#xff0c;一种是静态的Inventory文件&#xff0c;一种是动态的…

IAP固件升级进阶(Qt上位机)

前言 时隔近一年&#xff0c;再次接触IAP固件升级&#xff0c;这次修改了以前的一些bug&#xff0c;同时新增一些实用性的功能。 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com。 上位机界面 视频演示 当Up对iap固件升级的机制有了更深的理解后…

【论文阅读笔记】PA-SAM: Prompt Adapter SAM for High-Quality Image Segmentation

1.论文介绍 PA-SAM: Prompt Adapter SAM for High-Quality Image Segmentation PA-SAM&#xff1a;用于高质量图像分割的提示适配器SAM 2024年 ICME Paper Code 2.摘要 Segment Anything Model&#xff0c;SAM在各种图像分割任务中表现出了优异的性能。尽管SAM接受了超过10亿…

【Unity每日一记】如何在Unity里面添加视频,做媒体屏幕

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…