前端基础之JavaScript学习——变量、数据类型、类型转换

news2024/11/24 9:40:40

大家好,我是来自CSDN的博主PleaSure乐事,今天我们开始有关JS的学习,希望有所帮助并巩固有关前端的知识。

我使用的编译器为vscode,浏览器使用为谷歌浏览器,使用webstorm或其他环境效果几乎一样,使用系统自带的默认浏览器效果可能会有偏差,但是问题不大,都可以使用。


目录

JavaScript介绍

JS简介

JS书写位置

内部JS

外部JS

JS注释

结束符

输入输出语法

输出

document.write

​编辑

console.log

alert

输入

字面量

JavaScript变量

定义

基本使用

变量的声明

变量的赋值

变量的更新与变量值的交换

命名规则与规范

规则

规范

let和var关键字的区别

作用域

变量提升

重复声明

全局属性

JavaScript数组

JavaScript常量

JavaScript数据类型

基本数据类型

number数字类型

string字符串类型

字符串基本定义

字符串拼接

boolean布尔型

undefined未定义型

null空类型

复杂数据类型

JavaScript类型转换

隐式转换

​编辑

显示转换

结语


JavaScript介绍

JS简介

JS是一种客户端(浏览器)编程语言,主要用于监听、表单验证、数据交互、服务端编程(node.js)等方面,由ECMAScript和Web APIs两部分组成,其中Web APIs包含DOM文档操作和BOM操作浏览器两方面。

JS书写位置

内部JS

内部JS主要写在body内,但是要在</body>上方,即整个body最后,目的是为了操作上面的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>
    <h1>PleaSure乐事</h1>
    <script>alert('我是来自CSDN的PleaSure 希望我的博客对你有帮助')</script>
</body>
</html>

作为内部JS,也可以直接在html按键中直接书写需要的JS代码,但是注意在vue中会使用这样的方法,尽量避免使用这样的写法,例如:

<button onclick="alert('hello world')">点击生效</button>

外部JS

外部JS是在目标html文件外部建立一个以.js结尾的文件,并在目标html文件中在script中使用其路径进行引入,在.js文件中直接写需要的js内容。 但是一定要注意的是在引用需要的js文件后<script></script>中不能写其他的代码,否则会自动忽略。 例如:

//test.html
<body>
    <h1>PleaSure乐事</h1>
    <script src="test.js"></script>
</body>

//test.js
alert('我是来自CSDN的PleaSure 希望我的博客对你有帮助')

JS注释

JS的注释和C++、Java等类似,也分为单行注释和块注释两类,书写格式同样为两个左斜杆和斜杠+星号比如:

//注释
/*注释*/

结束符

CSS中需要「封号」来判断结束,但是JS中可以不写,一般跟着团队需求和开发规范来写。

输入输出语法

输出

document.write

输出语法的第一个为document.write,可以结合h1等标签进行书写。具体使用方法如下:

<body>
    <h1>PleaSure乐事</h1>
    <script>
        document.write('小黑子')
    </script>
</body>
console.log

第二种输出语法是console.log控制台输出,主要供程序员调试时使用,在页面当中不显示,但是控制台中会出现。控制台的调用方法为右键浏览器-检查页面元素即可调出。

alert

第三种输出方式则为使用页面弹出警示框alert(同内部JS中出现的alert) ,即为在用户进行操作前会进行提示。这一个输出已经在上面的JS书写位置部分已经讲解,就不再阐述。

输入

在JS当中,输入主要就一种:prompt,可以由此获得用户输入的内容。其中prompt括号中的前半部分应当输入提示信息,后半部分输入“输入框”中的默认信息。代码及效果如下:

<body>
    <script>
        var userInput = prompt("请输入你的请求", "学费了");
        if (userInput != "学费了") {
            document.write("你输入的请求是:" + userInput);
        }
        else{
            document.write("已学费,还要努力");
        }
    </script>
</body>

PS:这里如果输入其他内容,则会输出if语句当中的内容,这里就不再做展示。

字面量

在JS当中字面量是一种表示特定值的语法形式,它直接在源代码中表示数据本身。字面量不是变量,而是在代码中直接写出的实际数据。当你读取或编写代码时,你看到的就是它的实际值,即“所见即所得”。JS当中的字面量主要包含以下几种:

  1. 数字字面量:直接写出数字,可以是整数或浮点数。例如:114514, 3.14
  2. 字符串字面量:由引号包围的一系列字符,可以使用单引号或双引号。例如:'hello', "world"
  3. 布尔字面量:只有两个可能的值,truefalse
  4. 空字面量:null 表示一个空值或不存在的对象引用。
  5. 未定义字面量:undefined 表示一个变量已经被声明,但是还没有被赋值。
  6. 对象字面量:使用大括号 {} 包围的一组键值对。例如:{key: 'value'}
  7. 数组字面量:使用方括号 [] 包围的一系列值。例如:[1, 2, 3]
  8. 模板字面量:使用反引号 ` 包围的字符串,可以嵌入变量和表达式。例如:`Hello, ${name}!`
  9. 正则表达式字面量:由斜杠 / 包围的模式,用于字符串匹配。例如:/abc/gi

JavaScript变量

定义

变量是存储数据的容器,当不是数据本身。本质是程序在内存中申请的一块用来存储数据的小空间。需要注意的是如果变量过大或者其他情况可能会导致内存溢出的情况。

基本使用

变量的声明

变量的声明由两部分构成:声明关键字和变量名(也称标识)。声明的关键字为let,即提供的声明变量的词语。语法为:关键字+变量,例:let xiaoheizi。可以在一句let语句中同时定义多个变量,例如let age,name…… 。不过为了更好的可读性,一般分开写,不写在同一行。

变量的赋值

赋值与Java等一致,可以使用alert或者documen.write在页面中进行输出。注意,变量在声明的时候可以直接赋值(即初始化)。

<body>
    <script>
        let age
        age = 18
        document.write(age)
    </script>
</body>

也可以和上面的prompt一起使用。

变量的更新与变量值的交换

变量可以重新进行赋值,但是不可以重复定义。

多个变量可以使用一个中间变量进行交换,冒泡排序就是基于中间变量进行交换的。

命名规则与规范

规则

变量命名不能使用关键字如var,let等作为变量名,只能使用下划线,数字等,且数字不能打头,并严格区分大小写。

规范

变量命名应当做到命名有意义,见名知其意并使用驼峰命名,比如使用pleaSureCsdn就是一个典型的驼峰命名,且见名知意。

let和var关键字的区别

作用域

声明的变量具有函数作用域。在一个函数内部使用 var 声明一个变量,那么这个变量在整个函数体中都可见。如果在全局作用域中声明,那么它将成为一个全局变量。

let 声明的变量具有块作用域。这意味着在 { } 内部声明的变量只在该代码块内可见。

变量提升

var 声明的变量会被提升至作用域的顶部,即我们可以在声明之前访问这些变量,虽然其值会是 undefined

let 声明的变量不会被提升。在声明之前访问这些变量会导致一个引用错误。

重复声明

var 允许在同一作用域内重复声明同一个变量名,后面的声明会覆盖前面的声明。

let 不允许在同一个作用域内重复声明同一个变量名。尝试这样做会抛出一个语法错误。

全局属性

当你在全局作用域中使用 var 声明变量时,该变量会自动成为 window 对象的一个属性。

使用 let 声明的变量不会成为 window 对象的属性,即使它是在全局作用域中声明的。

JavaScript数组

数组就是数据的组合,将一组数据存储在单个变量名下。声明方式为:关键字let 数组名arr = 数组字面量[] 也可以用new array构造函数声明。

数组中每个数据按照顺序保存,都有编号(也称为索引号、下标),从0开始,和Java、C++等相似,但是不同的地方是,在JavaScript当中数组可以存储不同类型数据,即在同一个数组当中存储整数,字符串等。

<script>
    let age = [114514,123123,145678];
    let name = ["jack","tom","lily"];
    console.log(age);
    console.log(name);
    document.write(age);
    document.write("<br>");
    document.write(name);
</script>

JavaScript常量

JS当中使用const声明的变量叫常量。

声明方式:关键字const 变量名 = 数值 例:const PI = 3.1415926

使用场景:某个变量永远不会改变,使用const定义,不用let或var定义。需要特别注意的是const定义的时候一定要初始化,切不可修改,用let定义的时候可以先不赋值。

JavaScript数据类型

JavaScript中的数据类型都是弱数据类型,赋值后才知道它的数据类型。强数据类型就是赋值之前就已经知道类型,比如Java中会先用int定义一个变量名,此时我们已经知道了数据类型,那么就知道该变量的类型就称为强数据类型。PS:需要留意undefined和null二者的区别。

基本数据类型

number数字类型

该类型包含整数、浮点数(小数),可以进行加减乘除这四种基本的运算,以及取模运算。但是需要注意运算之间的需要注意优先级。

此时我们引入一个概念:NaN。NaN代表一个计算错误,表示一个不正确为未被定义的数学操作的到的结果。NaN是粘性的,任何跟NaN的操作都会返回NaN。就像以下输出都会是NaN:

let result = Number("Hello World");
console.log(result);
let result = 0 / 0;
console.log(result);
let result = Infinity - Infinity;
console.log(result);
let result = "123abc" * 2;
console.log(result);

string字符串类型

字符串基本定义

字符串常用单引号、双引号、反引号套起来使用,单引号和双引号基本没有区别,一般推荐使用单引号,引号中没有内容就称为空字符串,但是需要注意哪怕只有一个空格都不是空字符串。

<script>
    let name = 'jack'
    let age = 18
    let gender = '男'
    let hobby = ['唱','跳','rap','篮球']
    let phone = '123456'
</script>

单双引号可以相互嵌套,外单内双或者外双内单,必要时可以使用转义符\来输出单双引号

字符串拼接

字符串拼接可以直接用加号进行,比如数字字符拼接 ‘giegie’ + 18 + ’nb‘、字符相连:‘哥哥’ + ‘giegie’。另外还有一种字符串叫模版字符串,即外面用反引号包裹,里面用${变量名}替代,可以参考python中的输出形式 例:document.write(‘我今年${age}了’}。

<script>
    let name = "PleaSure";
    let age = 30;
    let greeting = `Hello, my name is ${name} and I am ${age} years old.`;
    console.log(greeting);
</script>

boolean布尔型

只有两个固定的值:true和false

undefined未定义型

表示未赋值的变量,即已经定义了变量,但是还没有初始化。

null空类型

表示赋值了,但内容为空,即一个尚未创建的对象,已经创建了一个对象,但是还处于没准备好的阶段

复杂数据类型

复杂数据类型也常被称为复合数据类型或引用数据类型,是指那些由简单数据类型(原始类型)组合而成的数据结构。这些类型通常需要更多的内存空间,并且它们的值存储在堆内存中,而变量本身只存储指向这些值的引用(指针)。当变量被赋值为复杂数据类型时,实际上存储的是指向数据所在位置的内存地址,而非数据本身

主要包含数组、对象、函数、Map和Set、TypedArray 和 DataView等。

JavaScript类型转换

JS当中的转换原因:表单、prompt获得的数据默认为字符串而非其他类型,故不能直接进行相加 所以我们需要把数据类型进行类型转换后再进行我们需要的操作。

隐式转换

隐式转换是系统内部自动进行类型转换,如果+号两边只要有一个字符串们就会把另一个也转换成字符串 但是除了+意外,-*/都自动转换为数字类型。

<script>
    console.log(1 + 1)
    console.log(1 + 'pleasure')
    console.log(1 + 2)
    console.log(1 + '2')
    console.log(1 - 2)
    console.log(1 - '2')
    console.log(+12)
    console.log(+'12')
</script>

显示转换

由于隐式转换的逻辑不严谨而且过于依赖经验,所以需要显示转化来转化为我们需要的类型。

对于数字型,可以直接用Number类型转化为数字类型,例:Number(目标) 。特例:NaN也是数字类型,代表非数字。

可以用parseInt只保留整数。例:parseInt(目标)。

可以用parseFloat保留小数 例:parseFloat(目标)


结语

今天对JavaScript进行了一定介绍,并对变量、数组、常量、数据类型、类型转换等进行了学习,并与大家分享,希望对大家有帮助。

如果对您有帮助,希望您可以为我留下点赞、评论、收藏或关注,这对我真的很重要,非常感谢!

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

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

相关文章

搞清c++中的队列(queue)以及双端队列(deque),以及常用的接口!

1. 队列 概念&#xff1a;Queue是一种先进先出(First In First Out,FIFO)的数据结构&#xff0c;它有两个出口 特征&#xff1a; 队列容器允许从一端新增元素&#xff0c;从另一端移除元素 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许有遍历行为 队列…

【React Hooks原理 - forwardRef、useImperativeHandle】

概述 上文我们聊了useRef的使用和实现&#xff0c;主要两个用途&#xff1a;1、用于持久化保存 2、用于绑定dom。 但是有时候我们需要在父组件中访问子组件的dom或者属性/方法&#xff0c;而React中默认是不允许父组件直接访问子组件的dom的&#xff0c;这时候就可以通过forwa…

进程通信(3): System V IPC

System IPC包括System V消息队列&#xff0c;System V信号量&#xff0c;System V共享内存区。 System V IPC使用一个key&#xff08;key_t&#xff09;作为他们名字&#xff0c;这个值由ftok函数通过路径名和一个id生成。 客户和服务器通过在路径名和id达成一致&#xff0c;双…

解决网页中的 video 标签在移动端浏览器(如百度访问网页)视频脱离文档流播放问题

问题现象 部分浏览器视频脱离文档流&#xff0c;滚动时&#xff0c;视频是悬浮出来&#xff0c;在顶部播放 解决方案 添加下列属性&#xff0c;可解决大部分浏览器的脱离文档流的问题 <videowebkit-playsinline""playsInlinex5-playsinlinet7-video-player-t…

pico+unity3d开启彩色透视

1、点击游戏对象、点击XR、点击添加XR Origin&#xff0c;并把自带的摄像对象删除 2、添加脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.XR.PXR;//引入xr对象 public class toushi : MonoBehaviour {// Start is called…

Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

1.安装python 我这里是3.9.5版本 安装依赖&#xff1a; yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 根据自己的需要下载对应的python版本&#xff1a; cd local wget https://www.python.org/ftp…

ELK日志管理

目录 一.ELK简介 1.Elasticsearch 2.Logstash 4.ELK 组件解决的主要问题 5.ELK应用的好处 6.ELK的工作原理 7.ELK的主要应用场景 二.安装部署ELK 1.前期准备 2.安装部署ElasticseaErch 软件 3. 在apache节点上 部署 Logstash 4.安装 kibana 三.实现nginx日志管理 …

modbus slave 设备通过 网关thingsboard-gateway 将数据上传到thingsboard云平台

搭建thingsboard物联网云平台花了大量时间&#xff0c;从小白到最后搭建成功&#xff0c;折磨了好几天&#xff0c;也感谢网友的帮助&#xff0c;提供了思路最终成功搞定&#xff0c;特此记录。 一、thingsboard环境搭建&#xff08;Ubuntu20.04LTS&#xff09; 参考官方文档&a…

景区导航导览系统:基于AR技术+VR技术的功能效益全面解析

在数字化时代背景下&#xff0c;游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手&#xff0c;不仅因为它能提供实时、精准的导航服务&#xff0c;更在于其融合AR&#xff08;增强现实&#xff09;、VR&#xff08;虚拟现实&#xff09;等前沿技术&…

Template execution failed: ReferenceError: name is not defined

问题 我们使用了html-webpack-plugin&#xff08;webpack&#xff09;进行编译html&#xff0c;导致的错误。 排查结果 连接地址 html-webpack-plugin版本低(2.30.1)&#xff0c;html模板里面不能有符号&#xff0c;注释都不行 // var reg new RegExp((^|&)${name}([^&…

【ROS2】高级:使用 Fast DDS 发现服务器作为发现协议 [社区贡献]

目标&#xff1a;本教程将展示如何使用 Fast DDS Discovery Server 发现协议启动 ROS 2 节点。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 目录 背景 快速 DDS 发现服务器 v2 先决条件 运行此教程 设置发现服务器 启动监听节点 启动对话节点展示发现服务器执行 可视化…

【15】Android基础知识之Window(一)

概述 这篇文章纠结了很久&#xff0c;在想需要怎么写&#xff1f;因为window有关的篇幅&#xff0c;如果需要讲起来那可太多了。从层级&#xff0c;或是从关联&#xff0c;总之不是很好开口。这次也下定决心&#xff0c;决定从浅入深的讲讲window这个东西。 Window Window是…

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块&#xff0c;简单配置&#xff0c;灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具&#xff0c;否则会报错“No crontab program”。如下图&#xff1a; python-crontab是其提供了python模块对crontab的访问&#xff0c;即可以通过p…

【简历】惠州某二本学院:前端简历指导,秋招面试通过率为0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届二本同学&#xff0c;投递前端职位的简历&#xff0c;那么在校招环节二本同学主要针对的还是小公司&#xff0c;这个学校因为…

怎么关闭Windows安全中心?

Windows安全中心是Windows操作系统中的一项重要功能&#xff0c;系统提供这个功能的目的是保护电脑免受各种安全威胁。尽管如此&#xff0c;有时候我们可能出于某些原因需要关闭它。本文将详细介绍如何关闭Windows安全中心&#xff0c;以及需要注意的事项。 重要提醒&#xff1…

minIO集成springboot

问题 minIO与spring集成。 步骤 创建桶 创建key 找到创建账号页面&#xff0c;如下图&#xff1a; 点击创建&#xff0c;如下图&#xff1a; 设置如下权限&#xff1a; {"Version": "2012-10-17","Statement": [{"Effect": &q…

生成式AI、3D模型交易、模型轻量化、模型格式转换、3D可视化、数字孪生引擎等

老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 1、基于 HTML5 和 …

django报错(一):python manage.py makemigrations,显示“No changes detected”

执行python manage.py makemigrations命令无任何文件生成&#xff0c;结果显示“No changes detected”。 解决方案一&#xff1a; 1、执行命令&#xff1a;python manage.py makemigrations –empty appname 2、删除其中的0001_initial.py文件&#xff08;因为这个文件内容是…

《昇思25天学习打卡营第25天|第10天》

今天是打卡的第十天&#xff0c;今天开始学应用实践中的LLM原理和实践&#xff0c;今天学的是基于MindSpore实现BERT对话情绪识别。最先了解的是BERT模型的简介&#xff08;来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&…

【Java】:浅克隆和深克隆

克隆 克隆和赋值 克隆的结果是有多个相同的实体&#xff0c;各个对象指向不同的实体而多个不同对象指向一个相同的实体不是克隆&#xff0c;而是赋值 克隆的过程 首先实例化一个 student1 对象 在堆里开辟了一块内存用来存储 age 10 这个数据 调用 clone 方法 在堆中又开辟了一…