【前端】JavaScript(概念+语法+形式+变量+数组+函数+作用域)

文章目录

  • JavaScript
    • 一、JavsScript概念
      • 1.JavaScript的开发方向
      • 2.JavaScript和CSS、HTML的关系
      • 3.JavaScript运行过程
      • 4.JavaScript的组成
    • 二、JavaScript的语法
      • 1.JS的书写形式
        • 1.行内式
        • 2.内嵌式
        • 3.外部式
        • 4.注释
        • 5.输入输出
            • 1.prompt和alert
            • 2.输出: console.log
      • 2.变量的使用
        • 1.创建变量
        • 2.动态类型
          • 1.强类型和弱类型
          • 2.动态类型与静态类型
      • 3.基本数据类型
        • 1.number数值类型
            • 进制表示
            • 特殊数字值
        • 2.string字符串类型
            • 1.求长度
            • 2.字符串拼接
        • 3.boolean类型
        • 4.undefined类型
        • 5.null空值类型
      • 4.运算符
            • 比较运算符
      • 5.语句
            • for
            • 三元运算符
            • switch
            • while
            • for
      • 6.数组
        • 1.创建数组
        • 2.获取数组元素
        • 3.新增数组元素
            • 1.通过修改length新增
            • 2.通过下标新增
            • 3.用push进行新增
        • 4.删除数组中的元素
      • 7.函数
          • 1.函数类型
          • 2.参数个数
          • 3.表达式
          • 4.作用域
            • 1.全局作用域
            • 2.局部作用域
          • 5.作用域链

JavaScript

一、JavsScript概念

  • JavaScript简称js
  • 是一个脚本语言,通过解释器运行
  • 主要在客户端(浏览器)上运行,现在也可以基于node.js在服务器端运行
  • 最早只是完成表单验证(验证数据的合法性)

1.JavaScript的开发方向

1.网页开发(复杂的特效和用户交互)

2.网页游戏开发

3.服务器开发(node.js)

4.桌面程序开发(Electron,VSCode)

5.手机APP开发

JavaScript之父:布兰登.艾奇

  • Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程

    (1)借鉴C语言的基本语法;

    (2)借鉴Java语言的数据类型和内存管理;

    (3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

    (4)借鉴Self语言,使用基于原型(prototype)的继承机制

  • the part that is good is not original, and the part that is original is not good.

2.JavaScript和CSS、HTML的关系

HTML:网页的结构(骨架)

CSS:网页的表现(皮肤)

JavaScript:网页的行为(灵魂)

3.JavaScript运行过程

  • 通常运行在浏览器上

浏览器分为渲染引擎+JS引擎

  • 渲染引擎:内核(解析html+CSS)

  • JS引擎:JS解释器(例如chrome内置的V8)

    JS引擎逐行读取JS代码的内容,然后解析成二进制指令,再进行执行

1.编写的JS代码保存在本地的硬盘(外存)上

2.双击.html文件后,浏览器读取文件,把文件的内容加载到内存中

3.浏览器会解析编写的代码,翻译成二进制指令(解释器)

4.cpu加载执行二进制指令

4.JavaScript的组成

1.ES (ECMAScript):JS的语法

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

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

要完成更复杂的交互,在浏览器端运行JS,除了语法,还需要DOM和BOM的API

在服务器端,则需要node.js的API

二、JavaScript的语法

1.JS的书写形式

1.行内式
  • 直接嵌入到html内部
    <input type="button" value="这是一个按钮" onclick="alert('hello')"><!-- 点击按钮->触发点击事件->执行代码->出现弹窗 -->

js中字符串常量可以用单引号,也可以用双引号

通常在html中用双引号,js中用单引号

2.内嵌式
  • 写到script标签中
<script>alert('hello world')
</script>
3.外部式
  • 写到单独的.js文件中
alert('我在学习js的外部引入')
<script src="./jscode02.js"></script>
  • 在外部引入时,script标签内部的内容要为空,因为并不会被执行
4.注释
单行注释://
多行注释:/*   */
5.输入输出
1.prompt和alert
prompt('请输入你的学号:');
//弹出一个输入框
alert('我在学习js的外部引入');
//弹出一个警示对话框, 输出结果var a = prompt('请输入你的学号:');
alert(a);
2.输出: console.log
console.log('这是一条日日志志')
//使用控制台对象的log方法
  • 在控制台打印一个日志(给程序员看)
  • 日志是程序员调试程序的重要手段
  • console是js中的一个对象

2.变量的使用

1.创建变量
    var name = 'xiaoming';console.log(name);let age = 18;console.log(age);
  • 在js中定义一个变量,不需要对它的类型进行说明

  • let避免了var定义变量的一些缺陷

推荐适应使用let来定义变量,这样变量的生命周期,作用域基本和Java一样

  • 在js中,对于数字只有一种类型:数值类型(可以是小数、整数等等)
2.动态类型
  • 在js中,所有的变量都是动态类型变量,且都属于弱类型
1.强类型和弱类型

强类型变量:不同类型变量进行赋值时,需要进行强制类型转换

弱类型变量:在不同类型变量赋值时,可以直接赋值

    a = 1;b = 'b';b = a;console.log(b);//1
  • JavaScript是弱类型语言,定义的都是弱类型变量
2.动态类型与静态类型

动态类型:代码在执行中,变量的类型可以随时发生变化

静态类型:变量的类型在定义时是什么类型,在运行时就是什么类型

C, C++, Java, Go 等语言是静态类型语言

一个变量在创建的时候类型就确定了, 不能在运行时发生改变

    a = 1;console.log(typeof(a));//numberb = 'b';a = b;console.log(typeof(a));//string

3.基本数据类型

JS中内置的几种类型:

  • number类型(不区分整数小数)、boolean类型(true,false)、string类型(字符串类型)、undefined类型(只有唯一的值undefined,表示未定义的值)、null类型(只有唯一的值null,表示空值)
1.number数值类型
  • 不区分整数和浮点数
    let a = 10;console.log(typeof (a));//numbera = a / 3;console.log(a);//3.3333333333333335console.log(typeof(a));//number
进制表示
var a = 07;      // 八进制整数, 以 0 开头
var b = 0xa;     // 十六进制整数, 以 0x 开头
var c = 0b10;    //二进制整数,以0b开头
特殊数字值
    console.log(10 / 0);//Infinityconsole.log(10 / -0);//-Infinityconsole.log(-10 / 0);//-Infinityconsole.log('hello'-10);//NaNconsole.log(isNaN('hello'-10));//true//isNaN()判断是否是一个非数字console.log('hello'+10);//hello10 进行了字符串拼接console.log(isNaN('hello'+10));//trueconsole.log(isNaN(10));//false
  • Infinity 无穷大:大于任何数,超出JS表示范围
  • -Infinity 无穷小:小于任何数,超出JS表示范围
  • NaN:表示当前的结果不是一个数字
2.string字符串类型
  • 字面值需要引起,单双都可
    b = 'JavaScript+"HTML"'//嵌套,单双引号组合c = "JavaScript+'CSS'"// d = "JavaScript+“HTML+CSS”"e = "JavaScript+\“HTML+CSS\”"//转义字符来转义“ ”
1.求长度
let a = "hello world"
alert(a.length);//11
  • 在Java中是方法,在JS中是属性
2.字符串拼接
let a = "hello world"
alert(a.length);//11
console.log(a+"!!!!!"+a.length)//hello world!!!!!11
  • 直接和引号内容进行拼接
    console.log(10+10);//20console.log('10'+10);//1010console.log(10+'10');//1010console.log('10'+'10');//1010
  • 如果是两个数字,进行计算。如果其中含有字符串类型,进行字符串拼接
3.boolean类型
  • 表示真假
  • boolean参与运算时,true当做1,false当做0 ,来进行运算
    let bool = true;console.log(typeof (bool));//booleanbool +=  1;console.log(bool);//2console.log(typeof (bool));//number
4.undefined类型
  • 一个变量如果没有被初始化过,结果为undefind
    let un ;console.log(un);//undefinedconsole.log(un+'2222');//undefined2222console.log(un+3333);//NaNconsole.log(un+true);//NaN

和字符串相加,直接进行拼贴

和数字相加,结果为NaN(非数字)

5.null空值类型
    let b = null;console.log(b+2002);//2002console.log(b+'2002');//null2002console.log(b+true);//1
  • 表示当前的变量是一个空值
  • undefind是没有值,null是被赋了一个空值

4.运算符

  • 跟Java类似

不同点:

比较运算符

==:比较的是变量的内容(会进行隐式类型转换)

===:比较的是内容+数据的类型

    let c =  10;let d = '10';console.log(c==d);//trueconsole.log(c===d);//false

快捷键:shift+ctrl+R == 强制刷新

5.语句

for
   let num = prompt('请输入一个数字');if(num%2==0){alert('这个数字是偶数');}else if(num%2==1){alert('这个数字是奇数');}else{alert('非法输入');}
三元运算符
   	alert("1=='1':" + (1 == '1' ? true : false));//truealert("1==='1':" + (1 === '1' ? true : false));//false
switch
    let day = prompt('请输入今天是星期几:');console.log(day);console.log(typeof (day));//stringday = parseInt(day);console.log(typeof (day));//numberswitch (day) {case 1:alert('今天是星期一');break;case 2:alert('今天是星期二');break;case 3:alert('今天是星期三');break;case 4:alert('今天是星期四');break;case 5:alert('今天是星期五');break;case 6:alert('今天是星期六');break;case 7:alert('今天是星期天');break;default:alert('非法输入');}
  • 一般在Sources中进行调试
  • 打上断点,shift+ctrl+r进入调试。fn+f11:进下一步。
while
let num = 5;let sum = 1;while(num>0){sum *=num;num--;}console.log(sum);var num = 100;var max = 200;while(num<=max){if(num%3==0){console.log(num);}num++;}
for
    for(var num =1;num<=10;num++){console.log(num);}let result = 1;for(let i = 1;i<=5;i++){result *= i;}console.log(result);
  • 定义变量时,如果没写let,相当于全局变量
  • 写了let,相当于局部变量

6.数组

1.创建数组

1.使用new关键字创建

2.使用字面量创建

    //定义一个数组let arr1 = new Array();//A要大写let arr2 = [];let arr3 = [1, 2, 'string', 7, true, 9];console.log(typeof(arr3));//object
  • 在JS中,不要求数组中的元素类型一定相同
  • 数组的类型是object
2.获取数组元素
    let arr3 = [1, 2, 'string', 7, true, 9];console.log(typeof(arr3));//objectconsole.log(arr3);console.log(arr3[0]);//1console.log(arr3[2]);//stringconsole.log(arr3[6]);//undefined
  • 超出索引范围:结果为:undefined
    arr3 = '字符串覆盖数组'console.log(arr3);//字符串覆盖数组
  • 不要给数组名直接赋值,JS不是静态语言。
  • 相当于把数组改成了一个字符串
3.新增数组元素
1.通过修改length新增
    let array = [2,4,6,8,10];array.length = 7;console.log(array);//(7) [2, 4, 6, 8, 10, empty × 2]console.log(array[5],array[6]);//undefined undefinedarray[6]= 14;console.log(array[5],array[6]);//undefined 14console.log(array);//(7) [2, 4, 6, 8, 10, empty, 14]array[5] = 12;console.log(array[5],array[6]);//12 14
2.通过下标新增
    let arr = [];console.log(arr);arr[3] = 9;console.log(arr);//[empty × 3, 9]
  • 空的地方都是empty,没有元素。这些位置的类型为undefined,没有被初始化过
3.用push进行新增
    let array = new Array();console.log(array);for (i = 0; i < 10; i++) {array[i] = i;}let newArray = new Array();for (i = 0; i < array.length; i++) {newArray.push(array[i]);}console.log(newArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4.删除数组中的元素
  • 使用 splice 方法删除元素
  • 两个参数:从几号下标开始删除,要删除几个元素
    console.log(newArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]newArray.splice(3,2);//删除了3和4console.log(newArray);//(8) [0, 1, 2, 5, 6, 7, 8, 9]

7.函数

1.函数类型
// 创建函数/函数声明/函数定义
function 函数名(形参列表) {函数体return 返回值;
}
// 函数调用
函数名(实参列表)           // 不考虑返回值
返回值 = 函数名(实参列表)   // 考虑返回值
  • 通过关键字function定义函数
  • 其后直接写函数名,不需要添加类型
    //没有参数、没有返回值的函数function hello() {console.log('hello');}hello();//有参数列表和返回值的函数function helloXXX(num, string) {console.log(num + "HELLO" + string)return 1;}let a = helloXXX(1,'HTML');//1HELLOHTMLconsole.log(a);//1console.log(typeof(a));//number helloXXX(2,'CSS');//2HELLOCSShelloXXX(3,'JavaScript');//3HELLOJavaScript 
  • 函数的类型,取决于返回值的类型。
  • 如果没有返回值,那个这个函数的类型就为undedefined
2.参数个数

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

    helloXXX();//undefinedHELLOundefinedhelloXXX('html'); //htmlHELLOundefined
  • 实参个数比形参个数多, 则多出的参数不参与函数运算
  • 实参个数比形参个数少, 则此时多出来的形参值为 undefined
3.表达式
    let result = function () {//计算1-100之间的和ret = 0;for (i = 0; i <= 100; i++) {ret += i;}return ret;}console.log(result());//5050let b = function () {console.log(arguments)//打印参数列表}b();//Arguments(0)b(1,2,3);//Arguments(3)b(1,2,3,4,5,6);//Arguments(6)
  • 这种写法定义了一个匿名函数,将这个匿名函数用一个变量来表示,通过变量来调用函数
  • JS中,函数是一等公民,可以用变量保存,也可以作为其他函数的参数或者返回值
4.作用域
  • 某个标识符名字在代码中的有效范围
1.全局作用域

在整个script标签中、或者单独的.js文件中生效

    let num = 10;//全局变量function text01(){let num = 100;//局部变量,只在{}生效console.log(num);}console.log(num);//10function text02(){let num = 200;console.log(num);}console.log(num);//10text01();//100text02();//200console.log(num);//10for(i = 1;i <= 100;i++){}console.log(i);//101
  • 在JS当中,如果定义一个变量不使用let/var,就会变成一个全局变量
2.局部作用域

在函数内部生效 :{ }内

5.作用域链
  • 函数可以定义在函数内部
  • 内层函数可以访问外层函数的局部变量

内层函数通过链式查找的方式,从内而外依次进行查找,从而访问到外部函数的变量

    let num2 = 20;function test03() {let num2 = 100;console.log(num2);//100function test04() {let num2 = 200;console.log(num2);//200}test04();//在test03中调用test04}test03();//调用test03
  • 内层函数中能找到变量,调用的还是内层函数的变量
    let num2 = 20;function test03() {let num2 = 100;console.log(num2);//100function test04() {//let num2 = 200;console.log(num2);//100}test04();//在test03中调用test04}test03();//调用test03
  • 内层函数中,没找到该变量,从上一层函数找
    let num2 = 20;function test03() {// let num2 = 100;console.log(num2);//20function test04() {//let num2 = 200;console.log(num2);//20}test04();//在test03中调用test04}test03();//调用test03
  • 上层函数仍没有找到,再向外找,最终在全局变量中找到

点击移步博客主页,欢迎光临~

偷cyk的图

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

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

相关文章

【Java设计模式】创建型——工厂方法模式

目录 背景/问题解决方案思路方案 图解简单工厂模式/静态工厂模式工厂方法模式 代码示例&#xff1a;图形工厂意图主要解决何时使用如何解决关键代码 工厂模式的优点工厂模式的缺点使用场景注意事项 背景/问题 在软件设计中&#xff0c;我们经常遇到需要创建不同类型对象的情况…

torchvision中的数据集使用

torchvision中的数据集使用 使用和下载CIFAR10数据集 输出测试集中的第一个元素&#xff08;输出img信息和target&#xff09; 查看分类classes 打断点–>右键Debug–>找到classes 代码 import torchvisiontrain_set torchvision.datasets.CIFAR10(root"./data…

实现点击用户头像或者id与其用户进行聊天(vue+springboot+WebSocket)

用户点击id直接与另一位用户聊天 前端如此&#xff1a; <template><!-- 消息盒子 --><div class"content-box" :style"contentWidth"><!-- 头像&#xff0c;用户名 --><div class"content-box-top box--flex">&l…

36.基于SpringBoot + Vue实现的前后端分离-高校汉服租赁网站系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的高校汉服租赁网站系统设计与实现管理…

【数据库】SQL简介

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。它用于访问和操作数据库中的数据&#xff0c;执行各种任务&#xff0c;如插入、更新、删除和检索数据&#x…

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

虚拟机VMware启动虚拟机刚启动有网之后没网

虚拟机VMware启动虚拟机刚启动有网之后没网 害&#xff0c;感觉这种调试的事情是真的浪费时间 如题&#xff0c;对于这种情况&#xff0c;一句话&#xff0c;就是你本地的DHCP虚拟机服务以及NAT网络服务没启动 本机windowR,输入services.msc 进入服务 然后 喏&#xff0c;…

重读Java设计模式: 适配器模式解析

引言 在软件开发中&#xff0c;经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类&#xff0c;但其接口与我们所需的不兼容时&#xff0c;我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式&#xff0c;它允许接口不兼容的类之间进行合作。本…

Unity类银河恶魔城学习记录12-6.5 p128.5 Create item by Craft源代码

此章节在原视频缺失&#xff0c;此过程为根据源代码推断而来&#xff0c;并非原视频步骤 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩…

yolov8实现用已经训练好的模型去实现数据集的自动标注

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、找到default.yaml文件二、修改default.yaml文件三、代码实现四、生成结果展示补充&#xff08;呼应前面代码训练数据集的路径位置&#xff09; 前言 我们经…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

【多模态融合】MetaBEV 解决传感器故障 3D检测、BEV分割任务

前言 本文介绍多模态融合中&#xff0c;如何解决传感器故障问题&#xff1b;基于激光雷达和相机&#xff0c;融合为BEV特征&#xff0c;实现3D检测和BEV分割&#xff0c;提高系统容错性和稳定性。 会讲解论文整体思路、模型框架、论文核心点、损失函数、实验与测试效果等。 …

详解 Redis 在 Centos 系统上的安装

文章目录 详解 Redis 在 Centos 系统上的安装1. 使用 yum 安装 Redis 52. 创建符号链接3. 修改配置文件4. 启动和停止 Redis 详解 Redis 在 Centos 系统上的安装 1. 使用 yum 安装 Redis 5 如果是Centos8&#xff0c;yum 仓库中默认的 redis 版本就是5&#xff0c;直接 yum i…

【Python】免费的图片/图标网站

专栏文章索引&#xff1a;Python 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 这里是我收集的几个免费的图片/图标网站&#xff1a; iconfont-阿里巴巴矢量图标库icon&#xff08;.ico&#xff09;INCONFINDER&#xff08;.ico&#xff09;

Android14之智能指针的弱引用、强引用、弱指针、强指针用法区别及代码实例(二百零五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2024年学鸿蒙开发“钱”途无量……

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习鸿蒙开…

linux 迁移home目录以及修改conda中pip的目录

1&#xff09;sudo rsync -av /home/lrf /data/home/lrf 将/home目录下的文件进行负责&#xff08;假设机械硬盘挂载在/data目录下&#xff09; 2&#xff09;usermod -d /data/home/lrf -m lrf 修改用户$HOME变量 3&#xff09;vi /etc/passwd 查看对应用户的$HOME变量是否成…

4.2.k8s的pod-标签管理、镜像拉取策略、容器重启策略、资源限制、优雅终止

一、标签管理 1.标签在k8s中极其重要&#xff0c;大多数资源的相互关联就需要使用标签&#xff1b;也就是说&#xff0c;资源的相互关联大多数时候&#xff0c;是使用标签进行关联的&#xff1b; 2.其他作用&#xff0c;在k8s集群中&#xff0c;node节点的一些操作比如污点及污…

【Linux】UDP编程【下】{三版本服务器/编程常见问题}

文章目录 3.linux网络涉及到的协议栈4.三个版本的服务器4.1响应式4.2命令式4.3交互式1.启动程序2.运行结果 3.linux网络涉及到的协议栈 Linux网络协议栈是一个复杂而强大的系统&#xff0c;它负责处理网络通信的各种细节。下面是对Linux网络协议栈的详细介绍&#xff1a; 套接…