JS语法(扫盲)

news2024/11/22 17:36:26

文章目录

    • 一、初识JavaScript
    • 二、第一个JS程序
      • JS代码的引入
      • JS程序的输出
    • 三、语法
      • 变量使用
      • 动态类型
      • 内置类型
      • 运算符
        • 强类型语言&弱类型语言
      • 条件语句
      • 循环语句
      • 数组
        • 创建数组
        • 获取数组元素
        • 新增数组元素
        • 删除数组元素
      • 函数
        • 语法格式
        • 形参实参个数的问题
        • 匿名函数&函数表达式
        • 作用域
        • 作用域链
      • 对象
        • 概念
        • 定义方法&使用
          • 1.使用字面常量
          • 2.使用 new Object 创建对象

一、初识JavaScript

JavaScript,简称JS,是世界上最流行的编程语言之一 ,是一个脚本语言, 通过解释器运行 ,主要在客户端(浏览器)上运行。

例如,chrome里边有个专门的模块,就是JS引擎,相当于JVM,能够解释执行js代码。后来有大佬把这部分代码单独拎出来,封装成了单独的程序,称为V8引擎,也就是说只要所以装了V8引擎就可以跑JS代码,所以JS现在的使用范围更广了。

现在JavaScript 的能做的事情:

  • 网页开发(更复杂的特效和用户交互)
  • 网页游戏开发
  • 服务器开发(node.js)
  • 桌面程序开发(Electron, VSCode 就是这么来的)
  • 手机 app 开发

发明者:布兰登 * 艾奇 (Brendan Eich) 【10天完成的……】

跟java的关系:毫无关系,是个蹭热度的语言。

跟HTML、CSS的关系:HTML是骨,CSS是肉、JS是魂

JS组成:ES(即ECMAScript,是一套标准,是 JS的语法部分)、DOM(页面文档对象模型,对页面的元素进行操作)、BOM(浏览器对象模型,对浏览器窗口进行操作)

光有 JS 语法, 只能写一些基础的逻辑流程.
但是要想完成更复杂的任务, 完成和浏览器以及页面的交互, 那么久需要 DOM API 和 BOM API.

前端我们不作为重点来学,所以这里只是ES和DOM

二、第一个JS程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello,js</title>
</head>
<body>
    <script>
        alert("hello")
    </script>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3EzZmFHY-1678529484982)(F:\typora插图\image-20230311155322078.png)]

JS代码的引入

js代码是以scipt的形式内嵌到html中,引入方式与css类似,有三种。

  1. 内部js,刚才看到的script标签

  2. 外部js。写到一个单独的.js文件,让html引入进来【实际开发】

  3. 行内js/内联js:直接写到html内部

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJKwz0FL-1678529484983)(F:\typora插图\image-20230311160036311.png)]

这里练习语法,主要用13两种方法,引入js代码

这三种语言的注释:

html:

css:/注释/

js://注释

​ /注释/

JS程序的输出

alert能够弹框,从而让用户看到程序的输出,但是弹框操作不太好,我们可以使用console.log在控制台中打印日志。(一个非常有力的调试手段)

关于这个框:

有些对话一弹出来就会组织用户操作其他界面,叫做模拟对话框。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9N2Vs3lj-1678529484983)(F:\typora插图\image-20230311161917157.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9EsieZRS-1678529484984)(F:\typora插图\image-20230311161852622.png)]

三、语法

变量使用

var name = 'zhangsan'; var age = 20;

不需要定义类型,var/let关键字+变量名=值。

注意:不写类型不代表没有类型,而是通过初始化操作的值来确定的。

JS不区分小数和整数,统一都是num类型。

很多语言都有这种语法。

更推荐let关键字。var是种老式的写法,比较坑。现在知道有人使用var不奇怪,我们自己无脑记住使用let即可。

动态类型

  1. JS 的变量类型是程序运行过程中才确定的(运行到 = 语句才会确定类型)
  2. 随着程序运行, 变量的类型可能会发生改变.

例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4BPsmod-1678529484984)(F:\typora插图\image-20230311164032405.png)]

动态类型&静态类型

​ 动态类型:一个变量在运行时类型可以发生改变

​ 静态类型:一个变量在运行时不可以改变

动态类型的好处&坏处

​ 好处:代码很灵活

​ 缺点:不明确性太大

很多公司在初创时都是使用的JS,做好了之后会再使用静态类型语言重构。

内置类型

  • number: 数字. 不区分整数和小数.
  • boolean: true 真, false 假.
  • string: 字符串类型.
  • undefined: 只有唯一的值 undefined. 表示未定义的值.
  • null: 只有唯一的值 null. 表示空值

前三个跟java差不多,所以这里我们主要看后两个

undefined:未定义的。

null:空值:有但是没有填值

别的语言中,如果访问到某个东西没有定义,直接报错。但是JS不报错,而是返回undefined。JS把别的语言认为非法的行为合法化。

运算符

这里边绝大部分都和Java是一样的,例如,算术运算符、赋值、符合赋值、自增自减、比较、逻辑运算、位运算、移位运算,但是这里还有几个特别的点需要注意

  1. == 比较相等(会进行隐式类型转换) ,=== 比较相等(不会进行隐式类型转换 )

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VIFHok9-1678529484985)(F:\typora插图\image-20230311165052676.png)]

强类型语言&弱类型语言

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tI8Xfa42-1678529484985)(F:\typora插图\image-20230311165245950.png)]

C++是弱还是强业界存在争议。

业界普遍认为,强类型优于弱类型。出错概率会降低。

条件语句

if-else if-else、swith、三目运算符和java一样

循环语句

while、for都和java一样

数组

创建数组

  • 使用new关键字:let arr=new Array();

  • 使用字面常量:

    var arr = [];

    var arr2 = [1, 2, ‘haha’, false];

注意:JS 的数组不要求元素是相同类型

获取数组元素

使用下标的方式访问数组元素(从 0 开始) ,如果下标超出范围读取元素, 则结果为 undefined 。

不要给数组名直接赋值, 此时数组中的所有元素都没了。相当于本来 arr 是一个数组, 重新赋值后变成字符串了。

var arr = ['小猪佩奇', '小猪乔治', '小羊苏西'];
arr[2] = '小猫凯迪';

//越界

console.log(arr[3]); // undefined
console.log(arr[-1]); // undefined

arr = '小猫凯迪';//变成字符串了

JS中的数组不是传统意义上的数组了,而是一个类似键值对的集合。

//又重新赋值
arr[100] = '日娃月娃';
console.log(arr[100]);

arr[‘hello’] = '熊出没';
console.log(arr['hello']);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eYa6o81Y-1678529484986)(F:\typora插图\image-20230311171337248.png)]

新增数组元素

  1. 通过修改 length 新增

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mGdcnpcJ-1678529484987)(F:\typora插图\image-20230311171520263.png)]

  2. 通过下标新增

    如果下标超出范围赋值元素, 则会给指定位置插入新元素 。正如上边的arr[100]

  3. 使用 push 进行追加元素

    尾插元素

    var arr = [9, 5, 2, 7, 3, 6, 8];
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] % 2 != 0) {
            newArr.push(arr[i]);
        }
    }
    console.log(newArr);
    

删除数组元素

使用 splice 方法删除元素 【巨牛的,可用来插入、修改、删除……】

splice(startIndex,count,变长参数)

  1. 若后边没有变长参数,相当于删除
  2. 若后边变长参数和前边指定区间的个数相同,就是替换
  3. 若其后边变长参数比前边区间个数长,就是新增

函数

语法格式

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

注意:

  • 开头都是function关键字
  • 函数名&形参列表有,但是返回值类型没有。形参列表不需要写类型,只要内部能在内部正常工作
  • 访问权限关键字也没有
  • 没有入口的概念
  • 形参和实参不匹配处理问题:字符串、undefined……

形参实参个数的问题

实参和形参之间的个数可以不匹配. 但是实际开发一般要求形参和实参个数要匹配

  1. 如果实参个数比形参个数多, 则多出的参数不参与函数运算
  2. 如果实参个数比形参个数少, 则此时多出来的形参值为 undefined

不会报错,只会尽可能的执行

匿名函数&函数表达式

add的类型就是function类型【typeof,运算符获取类型的】

var add = function() {
    var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
    	sum += arguments[i];
    }
    return sum;
}
console.log(add(10, 20)); // 30
console.log(add(1, 2, 3, 4)); // 10
console.log(typeof add); // function

JS 中函数是一等公民(术语), 可以用变量保存, 也可以作为其他函数的参数或者返回值 。

【JS不需要重载的概念】

作用域

作用域即变量的有效范围。

在 ES6 标准之前, 作用域主要分成两个

  • 全局作用域: 在整个 script 标签中, 或者单独的 js 文件中生效.
  • 局部作用域/函数作用域: 在函数内部生效.

作用域链

内部函数可以访问外部函数的变量. 采取的是链式查找的方式. 从内到外依次进行查找 。

与java中的变量捕获是类似的性质。

对象

概念

JS不是面向对象语言,但是存在对象的概念,两者差别很大,JS没有封装继承多态。

在 JS 中, 字符串, 数值, 数组, 函数都是对象.

每个对象中包含若干的属性和方法.

  • 属性: 事物的特征.
  • 方法: 事物的行为

定义方法&使用

1.使用字面常量
    <div>这是一个段落</div>
    <script>
        var a = {}; 
        var student = {
            name: 'Taylor Swift',
            height: 180,
            weight: 112,
            sing: function() {
                console.log('love story');
                console.log('cruel Summer');
            }
        };
        console.log(student.name);
        console.log(student.height);
        console.log(student.weight);
        console.log(student.sing);
    </script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACl07NHW-1678529484987)(F:\typora插图\image-20230311175907191.png)]

2.使用 new Object 创建对象

js中有什么对象方法,并不是提前约定好的,而是随时可以添加。

    <script>
        var student = new Object(); 
        student.name = "Taylor Swift";
        student.height = 180;
        student['weight'] = 112;
        student.sing= function() {
            console.log('love story');
            console.log('cruel Summer');
        }
        console.log(student.name);
        console.log(student['weight']);
    </script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TW51SOKw-1678529484988)(F:\typora插图\image-20230311180209979.png)]

在js的ES6版本中,引入了class关键字,Js也就可以定义类,通过类创建实例,更贴近java【再次说明,了解即可(秉持能不学就不学的原则,我现在是这么想的,阿弥陀佛)】

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

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

相关文章

PHP 的运行方式有哪些?

PHP本质上的运行方式可以分为两种&#xff1a; 基于命令行的基于PHP-FPM的 但实际上&#xff0c;PHP能做的事很多&#xff0c;很多场景下&#xff0c;不同的运行方式能让开发更方便&#xff0c;减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着&#xff0c;很…

stm32外设-GPIO

0. 写在最前 本栏目笔记都是基于stm32F10x 1. GPIO基本介绍 GPIO—general purpose intput output 是通用输入输出端口的简称&#xff0c;简单来说就是软件可控制的引脚&#xff0c; STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的…

java Date 和 Calendar类 万字详解(通俗易懂)

Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类&#xff0c;内容包括但不限于Date类简介&#xff0c;Date类使用…

【微信小程序】-- 自定义组件 - 数据监听器 (三十四)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

传奇开服流程—传奇单机架设教程

现在传奇私服还是那么的火爆&#xff0c;上次有报道发布站一年盈利几个亿&#xff0c;还是有很大的机会&#xff0c;很多玩家因为GM开服关服给折腾&#xff0c;刚充的钱服务器就关了&#xff0c;很是恼火&#xff0c;于是都想自己整个服开开&#xff0c;但又不知道从何下手&…

三菱FX5U之数据处理类指令的使用

本课程使用三菱PLC works3编程软件进行教学&#xff0c;并使用works3的仿真功能进行PLC仿真&#xff0c;学习的时候不需要有实物PLC。 补充说明&#xff1a;三菱 FX 5U系列PLC使用的是GX works3编程软件&#xff0c;FX 3U、Q系列PLC使用的是GX works3编程软件。 第一章 八个案…

YUV实践记录

文章目录YUV基础介绍&#xff1a;不同采样YUV格式的区别为什么要使用YUV格式呢&#xff1f;YUV的存储方式Android中的YUV_420_888附录&#xff1a;YUV基础介绍&#xff1a; YUV在做手机图像或者视频处理的时候会经常用到的一个格式&#xff0c;用此文来记录YUV相关介绍&#xf…

hibernate学习(五)

hibernate学习&#xff08;五&#xff09; hibernate的一对多关联映射&#xff1a; 一、数据库表与表之间关系 一对多建表原则&#xff1a; 多对多的建表原则&#xff1a; 一对一建表原则&#xff1a; &#xff08;1&#xff09;唯一外键对应&#xff1a; &#xff08;…

时间复杂度和空间复杂度的计算

目录 算法的复杂度 时间复杂的的概念 时间复杂度计算方法 大O的渐进表示法 空间复杂的概念 空间复杂的的计算方法 时间和空间复杂度的应用 消失的数字 轮转数组 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间&#xff08;内存&…

modbus转profinet网关连接5台台达ME300变频器案例

通过兴达易控Modbus转Profinet&#xff08;XD-MDPN100&#xff09;网关改善网络场景&#xff0c;变频器有掉线或数据丢失报警&#xff0c;影响系统的正常运行&#xff0c;将5台 ME300变频器modbus转Profinet到1200PLC&#xff0c;通过网关还可以实现Profinet转modbus RTU协议转…

LabVIEW中以编程方式获取VI克隆名称

LabVIEW中以编程方式获取VI克隆名称演示如何以编程方式获取VI的名称或克隆名称。如果VI作为顶级VI运行&#xff0c;则将显示VI的名称。如果VI在主VI中用作子VI&#xff0c;它将返回克隆的名称。在项目开发过程中&#xff0c;有时需要获取VI的名称。在此示例中&#xff0c;实现了…

【数论】试除法判断质数,分解质因数,筛质数

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 现已更新完KMP算法、排序模板&#xff0c;之…

代码管理--svnadmin工具介绍

1、简介 SVNAdmin2 是一款通过图形界面管理服务端SVN的web程序。正常情况下配置SVN仓库的人员权限需要登录到服务器手动修改 authz 和 passwd 两个文件&#xff0c;当仓库结构和人员权限上了规模后&#xff0c;手动管理就变的非常容易出错&#xff0c;本系统能够识别人员和权限…

【AWS入门】IAM基本应用-2023/3/4

目录IAM概述根用户和IAM用户参考IAM概述 IAM(Identity Access Management&#xff09;是身份和访问管理服务&#xff0c;要访问AWS服务和资源&#xff0c;就要使用IAM进行身份验证和授权。当我们通过控制台&#xff0c;CLI&#xff0c;或API访问AWS服务时&#xff0c;都需要通…

p5.js map映射

theme: smartblue 本文正在参加「金石计划」 本文简介 带尬猴&#xff0c;我嗨德育处主任 p5.js 为开发者提供了很多有用的方法&#xff0c;这些方法实现起来可能不难&#xff0c;但却非常实用&#xff0c;能大大减少我们的开发时间。 本文将通过举例说明的方式来讲解 映射 map…

《计算机网络》期末复习笔记

文章目录一、一些英文名词的标签&#xff08;方便记忆&#xff09;二、OSI七层协议三、综合题3.0 知识点储备3.1 在Internet 网中&#xff0c;某计算机的IP 地址是11001010.01100000.00101100.01011000 &#xff0c;请回答下列问题3.2 假定发送方要发送的数据为10000101。采用C…

【Spring 深入学习】AOP的前世今生之后续

AOP的前世今生之后续 1. 概述 上篇文章【Spring 深入学习】AOP的前世今生之代理模式我们讲述了代理模式。而我们今天的主人公AOP就是基于代理模式实现的&#xff0c;所以我们今天会简单学习下AOP 2. 什么是AOP 是面向切面编程&#xff0c;一般可以帮助我们在不修改现有代码的情…

Java中字符流(FileReader(read、close)、FileWriter(write、close)、字符(输入、输出)流原理解析)

1.创建对象&#xff1a; 2.读取数据 3.释放资源&#xff08;关流&#xff09; 如何使用重载的read()方法呢&#xff1f; FileWriter&#xff1a; 在前面我们指导&#xff0c;字节输出流和字符输出流的本质区别是&#xff0c;字节输出流一次只能操作一个字节&#xff0c;如果让…

QEMU启动ARM32 Linux内核

目录前言前置知识ARM Versatile Express开发板简介ARM处理器家族简介安装qemu-system-arm安装交叉编译工具交叉编译ARM32 Linux内核交叉编译ARM32 Busybox使用busybox制作initramfs使用QEMU启动ARM32 Linux内核模拟vexpress-a9开发板模拟vexpress-a15开发板参考前言 本文介绍采…

【数据库】数据库基础架构

数据库架构 数据库对于后端程序员来说是每天都需要打交道的系统&#xff0c;因此了解并掌握MySQL底层原理是必须的。 基础架构图 MySQL内部分为两层&#xff0c;一个是Server层&#xff0c;另一个是存储引擎层&#xff0c;而我们常用的就是MyISAM、InnoDB&#xff0c;主要负…