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

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!!
image-20240617155249414
本篇文章会与java进行对比学习,因为JS中很多语法和java是相同的,所以大家最好熟悉Java语言后再来进行学习,效果更佳,见效更快.

文章目录

  • 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的用法

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.mzph.cn/news/856535.shtml

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

相关文章

开发一个软件自动运行工具不可缺少的源代码分享!

在软件开发领域&#xff0c;自动运行工具扮演着至关重要的角色&#xff0c;它们能够简化软件部署、提升运行效率&#xff0c;并在很大程度上降低人为操作失误的可能性。 而一个高效的自动运行工具的背后&#xff0c;往往是经过精心设计与实现的源代码在默默支撑&#xff0c;本…

如何解决资源管理器被结束任务后的问题,怎么重启或新建资源管理器任务?

服务器上运行的东西太多&#xff0c;修改个文件夹的名字导致卡死。结束任务后导致系统页面空白。&#xff08;关闭了windows资源管理器&#xff09; 按CtrlShiftDelete没有反应。 按CtrlShiftEsc没有反应。 按CtrlShiftEnd没有反应。 按CtrlALTEnd有反应。 (win2012) 输入…

贝锐蒲公英异地组网方案:实现制药设备远程监控、远程运维

公司业务涉及放射性药品的生产与销售&#xff0c;在全国各地拥有20多个分公司。由于药品的特殊性&#xff0c;在日常生产过程中&#xff0c;需要符合药品监管规范要求&#xff0c;对各个分部的气相、液相设备及打印机等进行监管&#xff0c;了解其运行数据及工作情况。 为满足这…

QT截图程序三-截取自定义多边形

上一篇文章QT截图程序&#xff0c;可多屏幕截图二&#xff0c;增加调整截图区域功能-CSDN博客描述了如何截取&#xff0c;具备调整边缘功能后已经方便使用了&#xff0c;但是与系统自带的程序相比&#xff0c;似乎没有什么特别&#xff0c;只能截取矩形区域。 如果可以按照自己…

conda创建虚拟环境报错解决

1.报错截图 2.解决办法 查看当前所有虚拟环境 conda env list 解决办法 解决方法 bash conda config --add channels conda-forge conda config --set channel_priority strict conda config --set channel_priority flexible

GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 ——《将…

视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台

目录 一、背景说明 二、ISUP协议介绍 1、海康ISUP协议概述 2、ISUP协议支持主码流和子码流切换 &#xff08;1&#xff09;灵活配置和个性化 &#xff08;2&#xff09;适应不同网络带宽&#xff0c;提高使用体验 3、海康ehome相关文章 三、ISUP协议接入说明 1、平台侧…

【Day01】0基础微信小程序入门-学习笔记

文章目录 今日学习目标小程序简介1. 小程序和普通网页开发的区别2. 体验小程序 第一个小程序1.第一个小程序-注册2.第一个小程序-安装开发者工具3.第一个小程序-创建小程序项目 小程序代码构成1.小程序代码构成-项目结构2. 小程序代码构成-JSON文件3. 小程序代码构成-WXML模板4…

【DKN: Deep Knowledge-Aware Network for News Recommendation】

DKN: Deep Knowledge-Aware Network for News Recommendation 摘要 在线新闻推荐系统旨在解决新闻信息爆炸的问题&#xff0c;为用户进行个性化推荐。 总体而言&#xff0c;新闻语言高度凝练&#xff0c;充满知识实体和常识。 然而&#xff0c;现有的方法并没有意识到这些外部…

Javase.String 类

String 类 【本节目标】1. String类的重要性2. 常用方法2.1 字符串构造2.2 String对象的比较2.3 字符串查找2.4 转化2.5 字符串替换2.7 字符串截取2.8 其他操作方法2.9 字符串的不可变性2.10 字符串修改 3. StringBuilder和StringBuffer3.2 面试题&#xff1a; 4. String类oj4.…

软件开发为什么写日志,怎样写日志,什么时候写日志?

目录 一、为什么需要写日志 二、什么时候写日志 三、日志是写给谁看的 四、日志里都要写什么 五、日志的组织形式应该怎样 六、综上所述 在软件系统中&#xff0c;记录日志是基本且必要的操作&#xff0c;这一点几乎是所有开发者的共识。各种编程语言中都有众多的日志框架…

基于MATLAB的误码率与信噪比(附完整代码与分析)

目录 一. 写在前面 二. 如何计算误码率 三. 带噪声的误码率分析 3.1 代码思路 3.2 MATLAB源代码及分析 四. 总结 4.1 输入参数 4.2 规定比特长度 4.3 特殊形式比较 一. 写在前面 &#xff08;1&#xff09;本文章主要讨论如何仿真误码率随着信噪比变化的图像 &#…

112、路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指没有子节点…

Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)

目录 一、什么是集合&#xff1f; 二、集合接口 三、List集合 四、ArrayList容器类 1. 常用方法 1.1 增加 1.2 查找 int size() E get(int index) int indexOf(Object c) boolean contains(Object c) boolean isEmpty() List SubList(int fromindex,int …

QT-QPainter实现一个可切换的开关控件

1、效果 2、核心代码 #ifndef SWITCH_H #define SWITCH_H #include <QWidget> #include <QTimer>

Freemaker 模板

背景 发送邮件&#xff0c;正文利用freemaker完成 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>Autowired private Configuration configurer;GetMap…

如何调用讯飞星火认知大模型的API以利用其卓越功能

摘要 讯飞星火认知大模型&#xff0c;作为科大讯飞精心打造的一款人工智能模型&#xff0c;在自然语言理解和生成方面展现出了卓越的能力。这款模型通过深度学习技术和大量数据的训练&#xff0c;具备了强大的语言理解、文本生成和对话交互等功能。 一、模型功能概述 讯飞星…

我的创作纪念日--码农阿豪

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

前缀和+双指针,CF 131F - Present to Mom

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 131F - Present to Mom 二、解题报告 1、思路分析 很经典的一种把列看作cell 来进行双指针/递推的题型 我们考虑&#xff0c;可以预处理出原矩阵中的所有star 然后我们去枚举矩形的上下边界&#xff0c;把…

Flow Matching For Generative Modeling

Flow Matching For Generative Modeling 一、基于流的&#xff08;Flow based&#xff09;生成模型 生成模型 我们先回顾一下所谓的生成任务&#xff0c;究竟是想要做什么事情。我们认为&#xff0c;世界上所有的图片&#xff0c;是符合某种分布 p d a t a ( x ) p_{data}(…