【JavaEE】_JavaScript基础语法

news2024/11/29 2:36:52

目录

1. JavaScript概述

1.1 JavaScript简介

1.2 HTML、CSS、JavaScript的关系

1.3 JavaScrip的组成

2. JavaScript的书写形式

2.1 内嵌式 

2.2 行内式

2.3 外部式

3. 输出

3.1 alert

3.2 console.log

4. 变量的使用

4.1 创建变量

4.1.1 使用var

4.1.2 使用let

4.1.3 动态类型变量

4.2 基本数据类型

4.3 运算符

5. 数组

5.1 创建数组

5.1.1 使用new关键字创建

5.1.2 使用字面量方式创建

5.2 数组元素的访问与修改

5.3 数组的遍历

5.4 新增与删除数组元素

5.4.1 数组尾插元素 push

5.4.2 数组删除元素 splice

6. 函数

6.1 语法格式

6.2 参数个数

6.3 函数表达式

6.4 作用域

7.对象

7.1 创建对象方式1:使用字面值常量

7.2 创建对象方式2:使用new Object


1. JavaScript概述

1.1 JavaScript简介

(1)JavaScript是一个脚本语言,通过解释器运行;

(2)JavaScript主要在客户端(浏览器)上运行,如在chrome里有一个特定的模块:JS引擎,相当于JVM一样,能够解释执行JS代码,后来chrome上的JS引擎被单独封装成独立程序,称为V8引擎;

(3)JS最初只是为了进行前端页面开发,后来也被赋予了更多功能,可以用于开发桌面程序,手机app,服务器端的程序等等;

(4)JavaScrip又称liveScript或ECMAScript;

1.2 HTML、CSS、JavaScript的关系

即:HTML构成网页的结构(骨),CSS构成网页的表现(皮),JavaScript构成网页的行为(魂);

1.3 JavaScrip的组成

(1)ECMAScript(简称ES):JavaScrip语法;

(2)DOM:页面文档对象模型,对页面中的元素进行操作;

(3)BOM:浏览器对象模型,对浏览器窗口进行操作;

浏览器还提供了很多API,主要学习ECMAScript半部分和DOM中一些常用API;

2. JavaScript的书写形式

2.1 内嵌式 

类似于CSS利用style标签嵌入到HTML中一样,JavaScript可以利用script标签嵌入HTML中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        alert('hello');
        // alert是弹出会话框显示字符串内容的API
    </script>
</body>
</html>

2.2 行内式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div onclick="alert('hello')">
        click
    </div>
</body>
</html>

运行以下代码后,初始页面如下: 

点击文本后出现弹窗:

将js代码直接嵌入到html元素内部,进行点击div时才加载运行script标签;

2.3 外部式

在同目录下创建.js文件:

alert("hello");

在.html文件中插入.js文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="hello.js"> </script>
</body>
</html>

以上三种方式运行后显示页面均如下:

注:(1)HTML的注释是<!-- -->,CSS的注释是/* */,JS的注释是 //或 /* */;

(2)内嵌式与外部式都是在页面加载的时候执行script代码,行内式是在执行到html标签内容时才会执行script代码;

3. 输出

3.1 alert

(1)alert可以弹出一个警示对话框,从而看到输出;

(2)alert是一个模态对话框,即弹出来后会组织用户操作页面其他部分;

3.2 console.log

(1)console.log可以在控制台上进行输出;

(2)JavaScript没有字符、字符串的类型区分,单双引号均可(MySQL同);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        console.log('hello world');
    </script>
</body>
</html>

在Chrome网页开发者工具栏console标签页就可以看到输出结果:

注:console.log并不能被认为是一种可以和用户进行交互的一种手段,而是可以帮助程序员进行调试;

4. 变量的使用

4.1 创建变量

4.1.1 使用var

<body>
    <script>
        var a=10;
        console.log(a);
        var b="hello";
        console.log(b);
    </script>
</body>

注:(1)使用var 变量名=初始值;

(2)JS定义变量不必写类型,其类型是通过初始化操作的值来确定的;

(3)JS中没有整数、小数类型,即不区分int与double,只有number类型;

4.1.2 使用let

注:(1)var属于老式写法,存在一些弊端,如:无法报错变量重复定义:

    <script>
        var a=10;
        var a=10;
        console.log(a);
    </script>

在Chrome网页console标签页可查看该代码可正常运行不报错:

但是let是新式写法,更接近主流语言C++,Java等写法;

试将var改为let再运行后查看console标签页:

会发现重复定义变量报错;

还有变量作用域的问题等等,故而let使用的更多;

4.1.3 动态类型变量

<body>
    <script>
        let a=10;
        console.log(a);
        a="hello";
        console.log(a);
    </script>
</body>

打开Chrome网页的console标签页可以查看运行结果:

注:(1)JavaScript是一个动态类型的编程语言,一个变量在程序运行过程中可以发生改变;

像C语言、C++、Java就是静态类型编程语言;

像Python、JS、PHP、Lua等就是动态类型编程语言;

(2)动态类型的优点在于代码非常灵活,但弊端在于一个变量的类型、数值以及相关方法与属性都是不确定的;

4.2 基本数据类型

(1)number:数字,不区分整数和小数;

(2)boolean:true和false;

(3)string:字符串类型;

(4)undefined:只有唯一的值undefined,表示未定义的值;(没有盒子)

(5)null:只有唯一的值null,表示空值;(空盒子)

4.3 运算符

JavaScript的运算符与Java基本相同,此处仅罗列不同或新增运算符:

试运行以下代码:

    <script>
        let a=10;
        let b='10';
        console.log(a==b);
        console.log(a===b);
        
        let c=1;
        let d=0;
        let e=true;
        let f=false;
        console.log(c==e);
        console.log(d==f);
    </script>

打开Chrome网页的console标签页查看运行结果:

在JavaScript中,不只有==判等符号,还有===判等符号:

(1)== :比较相等(JS在进行不同类型的比较或运算时,会尝试尽可能地转成想同类型)

        ===:比较相等(不会进行隐式类型转换,先比较类型,类型不同则不等)

(2)!= 与 !== 同理;

注:像Java这种不太支持隐式类型转换的语言称为强类型语言,JS这种比较能支持隐式类型转换的语言称为弱类型语言;

5. 数组

5.1 创建数组

5.1.1 使用new关键字创建

        let arr=new Array();

5.1.2 使用字面量方式创建

        let arr2=[];
        let arr3=[1,2,3,4];

注:JavaScript中不要求数组元素是相同类型,故而以下写法是允许的:

        let arr4=[1,2.5,"hello",false];

5.2 数组元素的访问与修改

        let arr=['Mike','Mary','Jhon'];
        console.log(arr[0]);
        console.log(arr[1]);
        console.log(arr[2]);
        console.log(arr);
        arr[1]='Lucy';
        console.log(arr);

打开Chrome网页的console标签页,查看运行结果:

 注:(1)如果超出下标范围访问数组元素:

        let arr=['Mike','Mary','Jhon'];
        console.log(arr[100]);
        console.log(arr[-1]);

运行结果为: 

程序仍然正常执行,并未因为下标越界而异常终止;

(2)试运行以下代码:

        let arr=['Mike','Mary','Jhon'];
        console.log(arr);
        console.log('arr[100]= '+arr[100]);
        arr[-1]="xxxx";
        console.log(arr);
        arr[100]="yyyy";
        console.log(arr);
        arr["hello"]="zzzz";
        console.log(arr);

运行结果为:

JS的数组不仅是一个传统意义的数组,更是一个数组+Map的混合体,即带有“键值对”性质,很多动态类型语言都是如此,如PHP;

5.3 数组的遍历

        let arr=['Mike','Mary','Lucy'];
        console.log('方法1:for循环')
        for(let i=0;i<arr.length;i++){
            console.log(arr[i]);
        }
        console.log('方法2:for-each1')
        for(let i in arr){
            // i为数组元素下标
            console.log(arr[i]);
        }
        console.log('方法3:for-each2')
        for(let elem of arr){
            // elem为数组元素
            console.log(elem);
        }

运行结果如下:

5.4 新增与删除数组元素

5.4.1 数组尾插元素 push

        let arr=['Mike','Mary','Lucy'];
        console.log(arr);
        arr.push('Jike');
        console.log(arr);

运行结果如下:

5.4.2 数组删除元素 splice

splice不仅可以用于删除元素,还可以用来插入、删除等等,

solice(startIndex, count, 变长参数)
// 会将变长参数替换到参数位置指定区间之内
// 如果没有变长参数,即删除;
// 如果变长参数个数=指定区间元素个数,即修改;
// 如果变长参数个数>指定区间元素个数,即新增;

试运行以下代码:

        let arr=['Mike','Mary','Lucy','Jike'];
        console.log(arr);
        arr.splice(2,1);
        console.log(arr);
        arr.splice(2,0,'John');
        console.log(arr);

运行结果如下:

6. 函数

6.1 语法格式

// 创建函数/函数声明/函数定义
function 函数名(形参列表){
    函数体
    return 返回值;
}
// 函数调用
函数名(实参列表)         // 不考虑返回值
返回值=函数名(实参列表)  // 考虑返回值

注:(1)JS函数定义时不需要写返回值类型;

(2)JS不是面向对象的编程语言,故而也不存在封装、继承、多态等特点;

示例如下:

        function add(x,y){
            return x+y;
        }
        console.log(add(10,2));
        console.log(add('hello','world'));
        console.log(add(10,true));
        console.log(add(undefined,10));
        console.log(add(undefined,'10'));

运行结果为:

注:(1)undefined与数字相加,是将undefined转换为"undefined"再与数字相加,即最终结果不是一个数字,会返回NaN,即not a number;

        但undefined与字符串相加,即为字符串拼接;

6.2 参数个数

(1)如果实参个数少于形参个数,则多出的形参值为undefined:

        function add(x,y){
            return x+y;
        }
        console.log(add(10));
        console.log(add('10'));

运行结果为:

(2)如果实参个数比形参个数多,则多出的实参不参与运算:

        function add(x,y){
            return x+y;
        }
        console.log(add(10, 20,30));

运行结果如下:

注:(1)每个函数内部会自动定义一个arguments变量,相当于一个数组,包含了所有实参,故而可以使用arguments获取到所有实参

        function add(){
            let result=0;
            for(let elem of arguments){
                result += elem;
            }
            return result;
        }
        console.log(add(10));
        console.log(add(10,20));
        console.log(add(10,20,30));
        console.log(add(10,20,30,40));

运行结果如下:

对于JS这样的动态类型语言来说,不需要重载这样的语法;

6.3 函数表达式

        let add = function(){
            let result=0;
            for(let elem of arguments){
                result+=elem;
            }
            return result;
        }

注:(1)这种函数写法是:先定义了一个匿名函数,再将匿名函数赋值给一个add变量,这个add变量就是一个function类型变量:

        console.log(typeof(add));

且function类型变量是可以调用的,即在该种函数定义方式下,以下代码仍然可以正常运行:

        console.log(add(10,20,30));

JS中可以像普通变量一样将函数赋值给一个变量,同时也可以把函数作为一个函数的参数,或者把函数作为另一个函数的返回值,这一点Java是无法做到的;

6.4 作用域

JS中,有作用域链的概念,即:JS会先在当前作用域找,如果没有,依次向上层作用域找,直至全局作用域,如果仍然查询无果,就报错或undefined;

示例代码1:

        let num=1;
        function test1(){
            let num=2;
            function test2(){
                let num=3;
                console.log("test2:"+num);
            }
            test2();
            console.log("test1:"+num);
        }
        test1();
        console.log("global:"+num);

运行结果如下:

示例代码2:

        let num=1;
        function test1(){
            let num=2;
            function test2(){
                console.log("test2:"+num);
            }
            test2();
            console.log("test1:"+num);
        }
        test1();
        console.log("global:"+num);

运行结果如下:

当在test2函数中查找num无果,就会向上查找,找到定义在test1函数中的num=2,故而打印2;

7.对象

首先需要明确:JS不是面向对象的编程语言,但是存在对象的概念;

故而JS中关于对象的设定与Java差别很大,JS中没有封装、继承、多态,甚至没有类;

在JS中没有类,所有的对象类型都是Object;

JS的对象是有属性也有方法的;

7.1 创建对象方式1:使用字面值常量

        let student={
            name:'Mike',
            age:20,
            height:180,
            weight:75,
            learn:function(){
                console.log("JavaScript");
            },
            leisure:function(){
                console.log("Entertainment");
            }
        };
        console.log(student.name);
        console.log(student.age);
        student.learn();
        student.leisure();

运行结果如下:

7.2 创建对象方式2:使用new Object

        let student = new Object();
        student.name="Mike";
        student.age=20;
        student.learn=function(){
            console.log("JavaScript");
        }
        student.leisure=function(){
            console.log("Entertainment");
        }

注:

(1)这种创建方式中的对象的属性、方法都不是提前约定好的,随时都可以新增属性或方法;

(2)其实还可以通过构造函数创建对象,但是并不常用;

(3)在JS的ES6版本中,引入了class关键字,JS也可以定义类,再通过类创建对象,更接近Java了;

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

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

相关文章

java中事务的使用

文章目录 前言一、同一张表1.业务代码2.测试代码3.测试结果 二、不同表1.业务代码2.测试代码3.测试结果 总结 前言 本文将介绍在springboot中使用Transactional注解来完成对数据库事务的操作&#xff0c;保证数据一致性。 一、同一张表 1.业务代码 Controller Controller p…

停止内耗,做有用的事

很多读者朋友跟我交流的时候&#xff0c;都以为我有存稿&#xff0c;于是听到我说每周四现写的时候都很惊讶。其实没什么好惊讶的&#xff0c;每周四我都会把自己关在书房里一整天&#xff0c;断掉一切电话、微信、邮件&#xff0c;从中午写到晚上&#xff0c;直到写完为止。 这…

算法学习——LeetCode力扣回溯篇1

算法学习——LeetCode力扣回溯篇1 77. 组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 描述 任何顺序 返回答案。 示例 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2&#xff1a; 输…

springboot743二手交易平台

springboot743二手交易平台 获取源码——》公主号&#xff1a;计算机专业毕设大全

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 VisualVM 监控应用性能8.1.3 拓展案例 1&#xff1a;使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2&#xff1a;使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…

第四篇【传奇开心果微博系列】Python微项目技术点案例示例:美女颜值判官

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展思路四、添加不同类型的美女示例代码五、增加难度等级示例代码六、添加特殊道具示例代码七、设计关卡系统示例代码八、添加音效和背景音乐示例代码九、多人游戏…

【解决】idea控制台不输出trace/debug日志

idea控制台不输出trace日志 问题原因解决 问题 idea控制台不输出trace日志。 pom文件&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>输出lo…

23种计模式之Python/Go实现

目录 设计模式what?why?设计模式&#xff1a;设计模式也衍生出了很多的新的种类&#xff0c;不局限于这23种创建类设计模式&#xff08;5种&#xff09;结构类设计模式&#xff08;7种&#xff09;行为类设计模式&#xff08;11种&#xff09; 六大设计原则开闭原则里氏替换原…

P3612 [USACO17JAN] Secret Cow Code S题解

题目 奶牛正在试验秘密代码&#xff0c;并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。 给定一个字符串&#xff0c;让后面的字符旋转一次&#xff08;每一次正确的旋转&#xff0c;最后一个字符都会成为新的第一个字符&#xff09;。也就是说&#xff0…

localStorage、sessionStorage、cookie区别

localStorage: localStorage 的生命周期是永久的&#xff0c;关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据&#xff0c;否则数据永远不会消失 sessionStorage: sessionStorage 的生命周期是仅在当前会话下有效。sessionStorage 引入…

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示&#xff1a; 一座大型建筑物…

(二)【Jmeter】专栏实战项目靶场drupal部署

该专栏后续实战示例&#xff0c;都以该篇部署的项目展开操作。 前置条件 参考“&#xff08;一&#xff09;【Jmeter】JDK及Jmeter的安装部署及简单配置” 安装部署Jmeter&#xff0c;从文章最后下载“Postman、Rancher.ova、VirtualBox-7.0.12-159484-Win.exe、Xshell-7.0.01…

VUE学习——表单的输入绑定

使用【v-model】。 输入框 <template><h1>表单输入绑定</h1><input type"text" v-model"message"><p>输入的值&#xff1a;{{ message }}</p> </template> <script>export default{data(){return{messa…

java 数据结构ArrayList类

目录 什么是List 线性表 顺序表 ArrayList类 ArrayList无参方法 ArrayList有参方法 &#xff1f;通配符 ArrayList 的remove方法 ArrayList 的subList方法 Iterator&#xff1a;迭代器 使用ArrayList完成杨辉三角 什么是List 在集合框架中&#xff0c;List是一个接…

FileZilla Server 1.8.1内网搭建

配置环境服务器服务器下载服务器配置服务器配置 Server - ConfigureServer Listeners - Port 协议设置 Protocols settingsFTP and FTP over TLS(FTPS) Rights management(权利管理)Users(用户) 客户端建立连接 配置环境 服务器处于局域网内: 客户端 < -访问- > 公网 &l…

猫头虎分享已解决Bug || Invariant Violation in React: Element Type is Invalid ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

HarmonyOS鸿蒙学习基础篇 - 自定义组件(一)

前言 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与UI分离&#…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

代码随想录算法训练营第46天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

文章目录 198.打家劫舍思路代码 213.打家劫舍II思路代码 337.打家劫舍III思路代码 198.打家劫舍 题目链接&#xff1a;198.打家劫舍 文章讲解&#xff1a;代码随想录|198.打家劫舍 思路 1.dp[i]:从0打劫到i所获得的最高金额 2.是否打劫第i个决定了dp[i]&#xff1a;如果打劫则…

Unity类银河恶魔城学习记录7-4 P70 Improving sword‘s behaviour源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill_Controller.cs using System.Collections; using System.Colle…