JavaScript语法

news2024/9/22 3:42:04

在这里插入图片描述

文章目录

  • 一、JavaScript是什么?
    • JavaScript引入方式
  • 二、基础语法
    • 书写语法
    • 输出语句
    • 变量
    • 数据类型
    • 运算符
    • 流程控制语句
    • 数组
    • 函数
    • JS变量作用域
    • 对象

一、JavaScript是什么?

JavaScript:是一门跨平台的脚本语言,用来控制网页行为,可以与网页进行交互
大家需要注意JavaScript与Java是完全不同的两门语言,不论是概念还是设计.但是基础语法是类似的
JavaScript的组成:
1.ECMAScript(ES):JavaScript的语法
2.DOM:页面文档对象模型,对页面中的元素进行操作
3.BOM:浏览器对象模型,对浏览器窗口进行操作

JavaScript引入方式

内部JS:将JS代码定义在HTML页面中,在HTML代码中必须位于之间,可以放置HTML任意地方任意数量,但建议放置在底部,可以改善显示运行的速度
在这里插入图片描述

外部JS:将JS定义在外部的JS文件中,引入到HTML页面中

创建js文件
在这里插入图片描述
html引入js文件
在这里插入图片描述
我们可以发现上述两种方式都能顺利运行
在这里插入图片描述
注释类型:
大家需要区分下我们前端三剑客的注释种类:
html:
CSS:/* /
JS://(单行注释) , /
*/(多行注释)

二、基础语法

书写语法

1.区分大小写:与java一样,变量名,函数名以及其他一切东西都是区分大小写的
2.每行结尾的分号可有可无
3.注释:

单行注释: // 注释
多行注释: /* 注释 */
4.大括号表示代码块

if(a == 1) {
  alert(a);
}

输出语句

  1. 使用window.alert() 写入警告框
    我们日常使用也可以简写为alert()
    <script>
        alert("hello js");
    </script>

在这里插入图片描述
alert能够在网页弹框,让用户看到,但这个弹框操作并不太好

2.console.log() 写入浏览器控制台

    <script>
        console.log("hello js");
    </script>

在这里插入图片描述console.log()可以在开发者工具控制台打印信息,就和java的println一样
3.使用document.write() 写入HTML输出

    <script>
        document.write("hello js");
    </script>

在这里插入图片描述

变量

JS中使用var关键字(variable) 来声明变量

   <script>
        var a = 10;
        a = "hello";
    </script>

JS是一门弱类型语言,变量中可以存放不同类型的值,但不代表着JS中没有类型,而是变量的类型是通过赋值操作确认的。
变量名需要遵循以下规则:

组成字符的可以是任何字母,数字,下划线或美元符号
数字不能开头
建议使用驼峰命名

ES6引入了let关键字来定义变量,用法与var类型,但是let关键字只在所在代码块有效,且不允许重复声明,ES6 新增了const关键字,用来声明一个只读的变量,一旦声明,常量的值不能修改。
我们JS是动态类型的语言,一个变量在程序运行过程中,类型可以发生改变,这一点也有一定的好处,我们想写个两数之和,就只需要写一个函数就行,如果使用静态语言就得写int,double等各种各样的版本

数据类型

JS可分为:原始类型 和 引用类型
原始类型:

  1. number:数字(整数,小数,NaN(Not a Number))
  2. string:字符,字符串,单双引即可
  3. bollean:布尔,true,false
  4. null:对象为空
  5. undefined:当声明的变量未初始化时,该变量默认类型为 undefined

使用typeof运算符可以获取数据类型:

    <script>
        var a = 10;
        a = "hello";
        alert(typeof a);
    </script>

在这里插入图片描述

运算符

在这里插入图片描述
这里大多数和我们JAVA的运算符用法是一样的,我们只在这里介绍一些特殊的
== 与 ===:

    <script>
        let a = 5;
        let b = '5';
        console.log(a == b);
        let c = true;
        let d = 1;
        console.log(c == d);
    </script>

在这里插入图片描述
我们会发现,我们很出乎我们的意料,因为JS会在 == 操作时进行隐式类型转换,将true隐式转换为了1。
而我们的 ===不会进行隐式类型转换

    <script>
        let a = 5;
        let b = '5';
        console.log(a === b);
        let c = true;
        let d = 1;
        console.log(c === d);
    </script>

在这里插入图片描述
类型转换:
其他类型转数字:
1.string:将字符串字面值转为数字。如果字面值不是数字,则转为NaN。一般使用parseInt方法进行转换
2.boolean:true转为1,false转为0

其他类型转为boolean:
1.number:0和NaN转为false,其他数字转为true
2.string:空字符串转为false,其他字符串转为true
3.null:转为false
4.undefined:转为false

流程控制语句

if:
switch:
for:
while:
do…while()

这些用法和JAVA的用法一致,我们就不再单独介绍了

数组

JS中Array对象用于定义数组
定义数组:

//方式1:
let arr = new Array();
//方式2:
let arr = [];

JS中,数组的元素类型不要求统一,可以是任意类型。
在这里插入图片描述
就会出现上述定义数组的方式
访问数组

    <script>
        let arr = [1,2,3];
        console.log(arr[0]);
        console.log(arr[1]);
        console.log(arr[2]);
        console.log(arr);
    </script>

在这里插入图片描述

        console.log(arr[50]);
        arr[50] = "hello";
        console.log(arr);

在这里插入图片描述

我们再来一个令大家震惊的操作:

        arr[-1] = "a";
        console.log(arr);

在这里插入图片描述
我们可以认为JS的数组是一个数组+Map组合的东西,是使用键值对来组织数据的
遍历数组
方式一:

    <script>
        let arr = [1,2,3];
        for(let i = 0;i < arr.length;i++) {
            console.log(arr[i]);
        }
    </script>

在这里插入图片描述
方式二:

    <script>
        let arr = [1,2,3];
        //此处的i是数组的下标
        for(let i in arr) {
            console.log(arr[i]);
        }
    </script>

在这里插入图片描述
方式三:

    <script>
        let arr = [1,2,3];
        for(let elem of arr) {
            //elem是数组元素
            console.log(elem);
        }
    </script>

在这里插入图片描述
常见方法:

方法描述
concat()连接数组
pop()删除数组最后一个元素
push()向数组末尾添加一个元素
shift()删除并返回数组第一个元素
sort()对数组元素排序
toString()将数组转为字符串
toSource()返回该对象源代码
splice()删除元素

我们这里的splice()删除元素的方式相当于一个万能方法,可以插入,修改,删除:splice(startIndex,count,变长参数),这个方法就是将变长参数的内容,替换到前面指定的区间之内,如果没有变长参数,就是删除操作,如果变长参数和前面区间一样,就是修改/替换,如果变长参数比区间长,就是新增

函数

函数是被设计用来执行特定任务的代码块,JS函数通过function关键字进行定义:

// 创建函数/函数声明/函数定义
function 函数名(形参列表) {
    函数体
    return 返回值;
}

这里形参类型也不需要类型,因为JS是弱类型语言,返回值也不需要定义类型,直接在内部return返回即可

    <script>
        function add(a,b) {
            return a + b;
        }
    </script>

这样就实现了一个任意类型的加法

       let sum = add(undefined,5);
        console.log(sum);

在这里插入图片描述
NaN,代表的是没有这个数字

        let count = add('1',undefined);
        console.log(count);

在这里插入图片描述
大家需要注意这里,这里我们相当于是"1"与"undefined"进行了拼接

        let count = add(1,2,3);
        console.log(count);

在这里插入图片描述
当实参多于形参时,是不会报错的,只是多出来的实参不参与计算。
我们可以通过一个特殊的变量(arguments),拿到所有实参

    <script>
        function add() {
            let sum = 0;
            for(let elem of arguments) {
                sum += elem;
            }
            return sum;
        }
        console.log(add(1));
        console.log(add(1,2));
        console.log(add(1,2,3));
        console.log(add(1,2,3,4));
    </script>

在这里插入图片描述
函数表达式:
相当于是把一个匿名函数赋给一个变量

let functionName = function(参数列表) {
    执行代码
}

JS中,函数可以像普通变量一样赋给一个变量,同时也可以将函数作为另一个函数的参数,或者作为另一个函数的返回值

    <script>
         let add = function() {
            let sum = 0;
            for(let elem of arguments) {
                sum += elem;
            }
            return sum;
        }
    </script>

add变量的类型就是function类型,对于function类型的变量是可以调用的
我们就可以直接调用这个add

      console.log(add(1,2,3));

在这里插入图片描述

JS变量作用域

当我们代码想去访问某个变量时,JS会先在当前作用域找,如果没有就往上次找,一直往上层直到全局作用域,如果仍然找不到,就报错/undefined

    <script>
        let a = 1;
        function test() {
            let a = 2;
            function test1() {
                let a = 3;
                console.log("test1: " + a);
            }
            test1();
            console.log("test: " + a);
        }
        test();
        console.log("entre: " + a);
    </script>

在这里插入图片描述

对象

JS虽然不是面向对象的语言,但是也存在对象的概念,但是JS中没有类的概念,所有对象类型都是Object

    <script>
        let student = {
            name: "张三",
            age: 18,
            study: function() {
                console.log("abandon");
            }
        };
    </script>

大家需要注意我们在定义对象时的一些细节:
1.属性和方法使用键值对形式来组织
2.键值对之间使用,分割,最后一个属性后面的可有可无
3.键和值之间使用:分割
4.方法的值是一个匿名函数

// 1. 使用 . 成员访问运算符来访问属性 `.` 可以理解成 "的"
console.log(student.name);
// 2. 使用 [ ] 访问属性, 此时属性需要加上引号
console.log(student['age']);
// 3. 调用方法, 别忘记加上 () 
student.study();

在这里插入图片描述

在这里插入图片描述

    <script>
        let student = new Object;
        student.name = "李四";
        student.age = 20;
        student.study = function() {
            console.log("abandon");
        }
        console.log(student);
    </script>

在这里插入图片描述

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

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

相关文章

目标检测 pytorch复现R-CNN目标检测项目

目标检测 pytorch复现R-CNN目标检测项目1、R-CNN目标检测项目基本流程思路2、项目实现1 、数据集下载&#xff1a;2、车辆数据集抽取3、创建分类器数据集3、微调二分类网络模型4、分类器训练5、边界框回归器训练6、效果测试目标检测 R-CNN论文详细讲解1、R-CNN目标检测项目基本…

IO系统—相关数据结构初始化及调用详解(文件描述符表、文件结构表、文件节点表、设备节点表、内核驱动表等)

文章目录数据结构总述数据结构初始化流程概述各结构初始化及关联说明文件描述符表文件结构&#xff08;文件表&#xff09;文件节点设备节点内核驱动表数据结构总述 本文基于NEW_1 型内核数据结构展开&#xff0c;通过上图可以看出了使用三种数据结构&#xff08;文件描述符表项…

【Linux系统编程】03:文件夹操作

文件夹操作 OVERVIEW文件夹操作一、文件夹操作1.修改目录chdir2.打开目录opendir3.关闭目录closedir4.读取目录readdir5.文件信息获取stat二、案例使用1.ls实现2.stat文件信息获取3.ls -la主要实现4.ls -la重点修改5.ls -la文件字典序6.ls -la文件颜色显示三、补充操作1.文件定…

【SPSS】交叉设计方差分析和协方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 交叉设计方差分析

hibernate学习(三)

session&#xff1a;类似connection对象是连接对象 一、session&#xff1a; 二、session中的API 三、get和load的区别 四、修改方法&#xff1a; void update&#xff08;object obj&#xff09; 五、删除方法&#xff1a; void delete&#xff08;object obj&#xff0…

案例14-代码结构逻辑混乱,页面设计不美观

目录 目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 问题1&#xff1a;代码可读性差&#xff0c;代码结构混乱 问题2&#xff1a; 代码逻辑混乱&#xff0c;缺乏封装的意识 问题3&#xff1a;美观问题&#xff1a;问题和图标没有对应上 四…

最短路专题——Dijkstra、Floyd、Bellman-Ford、SPFA

目录前言一、全源最短路1.1 Floyd二、单源最短路2.1 Dijkstra2.1.1 堆优化版的Dijkstra2.2 Bellman-Ford2.2.1 队列优化版的Bellman-Ford&#xff1a;SPFA前言 BFS是一种朴素的最短路算法&#xff0c;它可以找到无权图或边权都相同的图的最短路&#xff0c;但是对于边权不完全…

AbstractQueuedSynchronizer从入门到踹门

概念设计初衷&#xff1a;该类利用 状态队列 实现了一个同步器&#xff0c;更多的是提供一些模板方法&#xff08;子类必须重写&#xff0c;不然会抛错&#xff09;。 设计功能&#xff1a;独占、共享模式两个核心&#xff0c;state、Queue2.1 statesetState、compareAndSetSta…

LayerNormalization

目录 1.BN的问题 1.1 BN与batch size 1.2 BN与RNN 2.LN详解 2.1 MLP中的LN 2.2 RNN中的LN 2.3 LN与ICS和损失平面平滑 BN不适用于RNN等动态网络和batchsize较小的时候效果不好。LayerNormalization的提出有效的解决BN的这两个问题。LN和BN不同点是归一化的维度是互相垂直…

SQL总结-排名的使用

##一、通过排名或者范围条件连表筛选特殊行 第一行最后一行区间&#xff08;第一行到第二行或者连续区间&#xff09;找中位数通过排名进行分组或者连续区间 ######1.使用条件筛选连表找区间 Employee 表保存了一年内的薪水信息。 请你编写 SQL 语句&#xff0c;来查询每个…

基于ChatRWKV智能问答和内容创作

ChatRWKV是对标ChatGPT的开源项目,希望做大规模语言模型的Stable Diffusion,测试很一段时间确实很像ChatGPT,从使用方法和内容结果上都很相似,但是还有一些差异。 文章目录 准备工作环境配置创建虚拟环境激活虚拟环境pip安装匹配版本ChatRWKV 使用模型替换常用参数设置使用…

手机磁吸背夹散热器制冷快速方案

手机散热器是什么&#xff1f;手机散热器分为几种类型&#xff1f;手机散热的方式都有哪些&#xff1f; 因为经常玩游戏&#xff0c;手机发热得厉害&#xff0c;都可以煎鸡蛋了&#xff0c;心想着要买个东西给手机散散热&#xff0c;没想到还真的有手机散热器。 不知道手机散…

mysql锁分类大全

前言 为什么会出现锁 MySQL中的锁是为了保证并发操作的正确性和一致性而存在的。 当多个用户同时对同一份数据进行操作时&#xff0c;如果不加控制地进行读写操作&#xff0c;就可能导致数据不一致的问题。例如&#xff0c;当多个用户同时对同一行数据进行写操作时&#xff…

uniapp使用webview嵌入vue页面及通信

最近刚做的一个需求&#xff0c;web端&#xff08;Vue&#xff09;使用了FormMaking库&#xff0c;FormMaking是一个拖拉拽的动态设计表单、快速开发的一个东西&#xff0c;拖拽完之后最终可以导出一个很长的json&#xff0c;然后通过json再进行回显&#xff0c;快速开发&#…

【Spring Boot】Spring Boot经典面试题分享

文章目录1. SpringBoot 简介2. SpringBoot 的优缺点3. SpringBoot 固定版本4. SpringBoot 的使用方式5. SpringBoot 自动配置原理6. PropertySource7. ImportResource8. springboot 的 profile 加载9. SpringBoot 激活指定 profile 的几种方式10. SpringBoot 项目内部配置文件加…

项目中用到的责任链模式

目录 1.什么是责任链&#xff1f;它的原理是什么&#xff1f; 2.应用场景 ​3.项目中的应用 传送门&#xff1a;策略模式&#xff0c;工作中你用上了吗&#xff1f; 1.什么是责任链&#xff1f;它的原理是什么&#xff1f; 将请求的发送和接收解耦&#xff0c;让多个接收对象…

NetApp AFF A900:针对任务关键型应用程序的解决方案

NetApp AFF A900&#xff1a;适用于数据中心的解决方案 AFF A 系列中的 AFF A900 高端 NVMe 闪存存储功能强大、安全可靠、具有故障恢复能力&#xff0c;提供您为任务关键型企业级应用程序提供动力并保持数据始终可用且安全所需的一切。 AFF A900&#xff1a;针对任务关键型应…

关于BLE的一些知识总结

数据包长度对于BLE4.0/4.1来说&#xff0c;一个数据包的有效载荷最大为20字节对于BLE4.2以上&#xff0c;数据包的有效载荷扩大为251字节传输速率在不考虑跳频间隔的情况下&#xff0c;最大传输速率为&#xff1a;1&#xff09;BLE4.0/4.1的理论吞吐率为39kb/s&#xff1b;2&am…

523-(ZCU102E的pin兼容替代卡) 基于 XCZU15EG的双 FMC通用信号处理板

&#xff08;ZCU102E的pin兼容替代卡&#xff09; 基于 XCZU15EG的双 FMC通用信号处理板 一、板卡概述 本板卡基于Xilinx Zynq Ultrascale MPSOC系列SOC XCZU15EG-FFVB1156架构&#xff0c;PS端搭载一组64-bit DDR4&#xff0c;容量32Gb&#xff0c;最高可稳定运行在240…

solidworks调用toolbox出现未配置怎么办

问题背景 本人最近在跟随B站恶补solidworks&#xff0c;学习链接如下 https://www.bilibili.com/video/BV1iw411Z7HZ/?spm_id_from333.337.search-card.all.click 但是在学习的过程中遇到了这样的问题 智能点现在配置&#xff0c;正常的应该是这样的 扒拉了网上所有的解决办…