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

大家好,我是来自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 ageage = 18document.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 = 18let 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.rhkb.cn/news/378205.html

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

相关文章

数电基础 - 硬件描述语言

目录 一. 简介 二. Verilog简介和基本程序结构 三. 应用场景 四. Verilog的学习方法 五.调式方法 一. 简介 硬件描述语言&#xff08;Hardware Description Language&#xff0c;HDL&#xff09;是用于描述数字电路和系统的形式化语言。 常见的硬件描述语言包括 VHDL&…

zephyr设置BLE广播数据实例

目录 实例1&#xff1a;静态开启广播数据实例2&#xff1a;动态更改广播数据实例3&#xff1a;创建可连接的广播 实例1&#xff1a;静态开启广播数据 新建一个hello world的工程模板。 在prj.conf中开启蓝牙 CONFIG_BTy这个宏&#xff0c;默认会开启广播支持 ( BT_BROADCAS…

组网升级,双击热备和宽带管理

拓扑 要求&#xff1a; 要求12&#xff1a; 要求13&#xff1a; 要求14&#xff1a; 要求15&#xff1a; 要求16&#xff1a;

解决 Vscode不支持c++11的语法

问题&#xff1a; 解决方案&#xff1a; 1、按 CtrlShiftP 调出命令面板&#xff0c;输入 C/C: Edit Configurations (UI) 并选择它。这将打开 C/C 配置界面 2、打开 c_cpp_properties.json 文件 3、编辑 c_cpp_properties.json 4、保存 c_cpp_properties.json 文件。 关闭并…

使用JS和CSS制作的小案例(day二)

一、写在开头 本项目是从github上摘取&#xff0c;自己练习使用后分享&#xff0c;方便登录github的小伙伴可以看本篇文章 50项目50天​编辑https://github.com/bradtraversy/50projects50dayshttps://github.com/bradtraversy/50projects50days有兴趣的小伙伴可以自己去gith…

SpringBoot详细解析

1.什么是springboot springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。那么spring对应springboot有什么缺点呢&#xff1f; spring项目搭建的缺点: 配置麻烦依赖tomcat启动慢 2.springboot的特点 自动配置 Spring Boot的自动配置是一个运行时&…

JVM垃圾回收-----垃圾分类

一、垃圾分类定义 垃圾分类是JVM垃圾分类中的第一步&#xff0c;这一步将堆中的对象分为存活对象和垃圾对象两类。 在垃圾分类阶段&#xff0c;JVM会从一组根对象开始&#xff0c;通过对象之间的引用关系&#xff0c;遍历所有的对象&#xff0c;并将所有存活的对象进行标记。…

flutter 手写 TabBar

前言&#xff1a; 这几天在使用 flutter TabBar 的时候 我们的设计给我提了一个需求&#xff1a; 如下 Tabbar 第一个元素 左对齐&#xff0c;试了下TabBar 的配置&#xff0c;无法实现这个需求&#xff0c;他的 配置是针对所有元素的。而且 这个 TabBar 下面的 滑块在移动的时…

idea中使用maven

默认情况下&#xff0c;idea会自动下载并安装maven&#xff0c;这不便于我们管理。 最好是自行下载maven&#xff0c;然后在idea中指定maven的文件夹路径

解析 Mira :基于 Web3,让先进的 AI 技术易于访问和使用

“Mira 平台正在以 Web3 的方式解决当前 AI 开发面临的复杂性问题&#xff0c;同时保护 AI 贡献者的权益&#xff0c;让他们可以自主拥有并货币化自己的模型、数据和应用&#xff0c;以使先进的 AI 技术更加易于访问和使用。” AI 代表着一种先进的生产力&#xff0c;它通过深…

【UE5.1】NPC人工智能——02 NPC移动到指定位置

效果 步骤 1. 新建一个蓝图&#xff0c;父类选择“AI控制器” 这里命名为“BP_NPC_AIController”&#xff0c;表示专门用于控制NPC的AI控制器 2. 找到我们之前创建的所有NPC的父类“BP_NPC” 打开“BP_NPC”&#xff0c;在类默认值中&#xff0c;将“AI控制器类”一项设置为“…

影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例

摘要&#xff1a;在互联网时代&#xff0c;转化率是衡量营销活动成功与否的关键指标。本文首先分析了影响转化率的多种因素&#xff0c;包括活动页面的设计、活动的限时性、主题文案的吸引力、从众心理的运用&#xff0c;以及最核心的产品质量与优惠力度。接着&#xff0c;本文…

path+HTTP协议+IP+端口(nodejs)

一.path //导入 fs const fs require(fs); const path require(path); //写入文件 // fs.writeFileSync(__dirname /index.html, love); // console.log(__dirname /index.html);//resolve 解决 // console.log(path.resolve(__dirname, ./index.html)); // console.log(p…

JVM知识点梳理

目录标题 1.类加载机制1.1 Java 运行时一个类是什么时候被加载的?1.2 JVM 一个类的加载过程?1.3 一个类被初始化的过程?1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM 有哪些类加载器?1.7 JVM 中不同的类加载器加载哪些文件?1.8 JVM 三层类加载…

基于LSTM及其变体的回归预测

1 所用模型 代码中用到了以下模型&#xff1a; 1. LSTM&#xff08;Long Short-Term Memory&#xff09;&#xff1a;长短时记忆网络&#xff0c;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xff0c;能够解决传统RNN在处理长序列时出现的梯度消失或爆炸的问题。L…

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.3. 填充和…

笔记 5 :linux 0.11 注释,函数 copy_mem() , copy_process () , 中断函数 int 80H 的代码框架

&#xff08;38&#xff09;接着介绍一个创建进程时的重要的函数 copy_mem&#xff08;&#xff09; 函数&#xff1a; &#xff08;39&#xff09; 分析另一个关于 fork&#xff08;&#xff09; 的重要的函数 copy_process&#xff08;&#xff09;&#xff0c;与李忠老师的操…

Qcom平台通过Hexagon IDE 测试程序性能指导

Qcom平台通过Hexagon IDE 测试程序性能指导 1 安装Hexagon IDE工具2 测试工程2.1 打开Hexagon IDE2.2 新建工程2.3 添加测试案例2.3.1 方法一&#xff1a;新建2.3.2 方法二&#xff1a;拷贝 2.4 配置测试环境2.4.1 包含头文件2.4.2 添加程序优化功能(需先bulid一下)2.4.3 添加g…

【问题记录】Docker配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 注意点 前言 由于想用nodejs实现实时获取Mongodb数据流&#xff0c;但是报错显示需要有副本集的mongodb才能实现实时获取信息流&#xff0c;…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述&#xff1a; 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…