想品客老师的第一天:值类型使用

前面两章的摘要

ECMAscript(也就是ES)是JavaScript的一个标准,就像c++的c11和c99一样,几把的一年出一套标准

freeze()是一个对象方法,表示锁定、固定一个对象不可改变(因为const对于标量不可变,但是对于引用类型会被改变,所以作用是让const更const),如果想改变的时候显示报错信息可以加上

// 全局严格模式
"use strict";
x = 10; // ReferenceError: x is not defined// 局部严格模式
function foo() {"use strict";y = 20; // ReferenceError: y is not defined
}
foo();

一些其他比较重要的内容在往期涉及的文章里做了增添修改

值运算符

复习一下instanceof(判断该对象是否在原型链上)

   let hd = [];let hdcms = {};// console.log(typeof hdcms);// hd.prototypeconsole.log(hd instanceof Array);//trueconsole.log(hdcms instanceof Array);//falsefunction User() { }let xj = new User();console.log(xj instanceof Array);//false

字符串类型

转义字符

老生常谈的【\】为转义字符

 const str="今天是学习\"后盾人\"的第一天"//转义字符console.log(str)//今天是学习"后盾人"的第一天const str1 = "今天是学习\\后盾人\\的第一天"//转义字符console.log(str1)//今天是学习\后盾人\的第一天

【\t】用于在文本中插入一个制表符,相当于按下键盘上的 Tab 键

但是在 HTML 中,【\t 】会被渲染为单个空格,除非使用 <pre> 标签或 CSS 的 white-space: pre 属性。

另一个插入多个空格的方式是【&nbsp】

<p>Hello&nbsp;World</p> <!-- 渲染为: Hello World -->
<p>Hello&nbsp;&nbsp;&nbsp;World</p> <!-- 渲染为: Hello   World -->

这些在html里也讲过哈

【\n】表换行不用说了

【+】可以连接两个字符串

最好的办法还是使用模板字符串【`${}`】

模板字面量

模板字面量就是模板字符串哈

有些低版本的浏览器不支持模板字符串,后期可以打包,让它也可以使用es5的规则

字面量里面还可以套字面量:

    let lessons = [{ title: "媒体查询响应式布局" },{ title: "FLEX弹性盒模型" },{ title: "GRID栅格系统" }]function template() {return `<ul>${lessons.map(item => `<li>${item.title}</li>`).join('')}</ul>`}document.body.innerHTML = template()

新增特性:标签模板

模板字符串(Template Literals)的一种高级用法:使用一个函数(一般叫标签函数)解析和处理模板字符串的内容,特别适合处理动态生成的字符串内容

标签模板的语法是在模板字符串前加上一个函数名,这个函数会被调用来处理模板字符串的内容。

这是他的格式:

function tagFunction(strings, ...values) {console.log(strings); // 静态部分的数组console.log(values);  // 动态部分的值
}const name = "Alice";
const age = 25;tagFunction`Hello, my name is ${name} and I am ${age} years old.`;
 let lessons = [{ title: "后盾人媒体查询响应式布局", author: "后盾人向军" },{ title: "FLEX 弹性盒模型", author: "后盾人" },{ title: "GRID 栅格系统后盾人教程", author: "古老师" }];function template() {return `<ul>${lessons.map(item => links`<li>作者:${item.author},课程:${item.title}</li>`).join("")}//这一串是模板标签,一个函数(links)跟一个模板字符串(``)</ul>`}function links(strings, ...vars) {return strings.map((str, key) => { return 
(str + (vars[key] ? vars[key].replace("后盾人", `<a href="https://www.houdunren.com">后盾人</a>`) : "")) }).join("");}document.body.innerHTML += template();

hdr我恨你。。。这个代码块大概实现的是动态生成一个包含课程信息的 HTML 列表

lessons是一个对象数组,函数template()来生成一个html样式的列表,links就是标签模板里的模板函数,调用links函数后把后面的模板字符串里的值分为动态和静态来处理

静态:普通字符串,在这里就是【["<li>作者:", ",课程:", "</li>"]】

动态:插值表达式【${}】的值,在这里就是【[item.author, item.title]】

拆开以后里面,把静态部分传入links()函数的【strings】参数,动态部分传入links()函数的【...vars】,.【..var】是剩余参数,将接收的多个参数收集到一个数组中

然后执行return语句:返回一个【静态部分和动态部分的值,如果动态部分的值不为空,替换为一个`<a href="https://www.houdunren.com"链接,如果为空就替换为''(空字符串)】

想品客老师的第一天

关于字符串的函数

str.trim()可以去除字符串首部和尾部的空格,中间的去不掉

let str = ' 今天是学习   后盾人   的第一天 '//前后各有一个空格console.log(str.length)//20console.log(str.trim().length)//18

当我们判定密码输入的位数的时候,就需要去掉空格(总感觉前面学过(擦汗)

这时候就需要去掉空格

   let password=document.querySelector("[name='password']")password.addEventListener("keyup",function(){this.value=this.value.trim()console.log(this.value.length)})

str.charAt()方法和普通的下标索引是相似的:

let str = 'Hello, World!'
console.log(str.charAt(0))// 输出'H'
console.log(str.[0]) // 输出'H'
//区别在超出索引值的范围时
console.log(str.charAt(20)); // 输出:''
console.log(str[20]); // 输出:undefined
 let hd = "想品客老师的第一天"// console.log(hd[0]);for (let i = 0; i < hd.length; i++) {let span = document.createElement("span")span.style.fontSize = (i + 1) * 10 + "px"span.innerHTML = hd.charAt(i)document.body.append(span)}

字符串截取

用于截取后台传来的数据:

let hd = "想品客老师的第一天"
console.log(hd.slice(1))//品客老师的第一天
console.log(hd.substr(1))//品客老师的第一天

可以看见内容是一样的,但是这两个函数使用起来是有区别的:

slice(start, end):左闭右开的截取,end表示结束提取的下标;如果省略end参数,则默认提取到字符串结尾

支持负数索引,表示从字符串末尾开始计算。

如果 start 大于 end,返回空字符串

substr(start, length):从 start 索引开始提取字符串,提取长度为 length 的子字符串;如果省略length参数,则默认提取到字符串结尾

​​​​​​​支持负数索引,表示从字符串末尾开始计算。

如果 start 为负数,表示从字符串末尾开始计算索引。

还有一个提取字符串的函数是substring():

let hd = "想品客老师的第一天";
console.log(hd.substring(1)); // 输出:品客老师的第一天
console.log(hd.substring(1, 4)); // 输出:品客老
console.log(hd.substring(4, 1)); // 输出:品客老(自动交换 start 和 end)
console.log(hd.substring(-3)); // 输出:想品客老师的第一天(负数被当作 0)

substring(start, end):左闭右开的截取,end表示结束提取的下标;如果省略end参数,则默认提取到字符串结尾

不支持负数索引。如果传入负数,会被当作 0 处理

如果 start > endsubstring() 会自动交换 start 和 end 的值。

 let hd = "想品客老师的第一天"console.log(hd.slice(3,6))//老师的console.log(hd.substr(2,3))//客老师console.log(hd.substring(1,4))//品客老

检索字符串

indexOf()函数返回对应字符在字符串里的下标,不存在的字符返回-1

后面的参数表示从第几个字符向后检索(总感觉都学过。)

    let hd = "想品客老师的第一天"  console.log(hd.indexOf('第'))//6console.log(hd.indexOf('一', 7))//7console.log(hd.indexOf('一', 8))//-1console.log(hd.indexOf('二'))//-1

旧版里检索字符是否存在需要确认console.log(hd.indexOf('某个字符'))这条语句是否等于-1

新版里有另一个函数:includes()

    let hd = "想品客老师的第一天"console.log(hd.indexOf('第'))//6console.log(hd.includes('第'))//true

直接返回一个bool值确认是否检索到

lastIndexOf()方法表示从后向前搜索(即从索引 6开始向左搜索)

  let hd = "想品客老师的第一天"console.log(hd.lastIndexOf('第',6))//6console.log(hd.lastIndexOf('第', 5))//-1

改为5则输出-1

还有老生常谈的startsWith()以某字符串开头和endsWith()以某字符串结尾

  let hd = "想品客老师的第一天"console.log(hd.startsWith('想'))//trueconsole.log(hd.endsWith('天'))//true

返回一个bool值

如果想在检索的时候不区分大小写,可以统一转换为大写/小写

const hd='Hello world'
console.log(hd.toLowerCase().startsWith('h'))//true

some()方法是一个数组方法

callback是回调函数,​​​​​​

array.some(callback(element, index, array), thisArg)
  • callback:一个测试函数,用于检查数组中的每个元素。

    • element:当前正在处理的元素。

    • index(可选):当前元素的索引。

    • array(可选):调用 some() 的数组本身。

  • thisArg(可选):执行 callback 时使用的 this 值。

​​​​​

 const hds = 'Hello world'console.log(hds.toLowerCase().startsWith('h'))//trueconst word = ["@@", "css"];const string = "我喜欢在后盾人学习php与css知识";const status = word.some(word => {return string.includes(word);});if (status) {//在string字符串里找wordconsole.log("找到了关键词")//找到了css,所以为true}

替换字符串

replace()方法,老生常谈了属于是

实现一个替换查找:

const words = ["php", "css"];
const strings = "我喜欢在后盾人学习php与css知识"const replaceString = words.reduce((pre, word) => pre.replace(new RegExp(word, "g"), `<a href="?w=${word}">${word}</a>`),strings
)console.log(replaceString)
document.body.innerHTML += replaceString

重复字符

repeat()

  function phone(num, len) {return String(num).slice(0, len * -1) + '*'.repeat(len)}console.log(phone(27390201209,4))//2739020****

slice的参数是0,-4,所以选定的范围是后四位

转换为String类型才能用slice()方法哦

Boolean类型转换

这部分之前写过js:基础-CSDN博客

关于Boolean的隐式转换这里写一下:

falsetrue
0(数字零)非零数字(如 1-13.14
""(空字符串)非空字符串(如 "hello""0""false"
null对象(如 {}[]new Date()
undefined函数
NaN

==的时候会隐式转换,===的时候不会

console.log(1 == true)//true
console.log(1 === true)//false

显示转换再补充一点:

【!】在bool类型的显示转换

  let n = 0console.log(typeof n)//numberconsole.log(n == true)//false,n为falseconsole.log(typeof !n)//booleanconsole.log(!n == true)//true,n本来为false,感叹号进行了类型转换+取反console.log(typeof !!n)//booleanconsole.log(!!n == true)//false,类型转换+二次取反

Boolean()也可以显示转换,和【!!】一个作用

Number类型

这部分很多学过了

一些Math方法

max()、min(),ceil()向上取整,floor()向下取整,toFixed(n)保留n位小数,random()取随机数

随机点名:

 const students = ["李四", "赵云", "张三", "王五", "马六"]function arrayRandomValue(arr, start, end) {end = end ? end : arr.lengthlet index = Math.floor(start + Math.random() * (end - start))console.log(index)return arr[index]}console.log(arrayRandomValue(students, 0,))

NaN

NaN的几种情况

NaN:Not A Number

NaN自己也不和自己相等

判断是否为NaN:

两种方法

这种情况也为NaN:

      let arr = [1, 2, 3]console.log(Number(arr))//NaN

时间戳

+new Date()和Date.now()都可以生成时间戳

js:日期对象和dom节点-CSDN博客

大部分和这篇是重复的。。

获取指定时间戳的其他方法

优秀日期处理库

https://www.bootcdn.cn/

 <script src="https://cdn.bootcss.com/moment.js/2.24.0/moment.min.js"></script>

引入库​​​​​​​

<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.30.1/moment.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.30.1/locale/ar-kw.min.js"></script><input type="text" name="password"><script>const date = moment("2022-02-22 22:22:22");console.log(date.format("YYYY-MM-DD HH:mm:ss")); // 输出原始日期console.log(date.add(10, "days").format("YYYY-MM-DD HH:mm:ss")); // 输出加10天后的日期</script>

后盾人老师感觉在跟我唠嗑。。。没有重点。。这种没有重点的听课真难受

后盾人老师激情一讲,我查文档查半天。。。

后盾人老师你是怎么把代码写得行云流水的。。。

没人觉得后盾人老师长得很像黄磊吗

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

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

相关文章

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

解决本地运行MR程序访问权限问题

文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类&#xff0c;抛出如下异常&#xff1a; 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时&#xff0c;遇到了 HDFS&#xff08;Hadoop 分布式文件系统&a…

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

高通8255 Android STR 启动失败要因分析调查

目录 背景&#xff1a; 调查过程&#xff1a; 步骤1&#xff1a; slog2info | grep vmm_service 步骤2&#xff1a; slog2info | grep qvm 总结&#xff1a; 解决方案 背景&#xff1a; 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后&#xff0c;脱出STR时…

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…

可解释性机器学习

一、引言 随着机器学习&#xff08;ML&#xff09;在各个领域的广泛应用&#xff0c;模型的复杂度不断增加&#xff0c;如深度神经网络等黑盒模型逐渐成为主流。这些模型虽然具有很高的预测性能&#xff0c;但其内部的决策机制往往难以理解&#xff0c;导致模型的透明度和可解释…

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能&#xff0c;主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集&#xff0c;如ImageNet、CIFAR-10、MNIST等&#xff0c;方便开发者进行训练和评估。模型模块封装了大量经…

网络安全防护指南:筑牢网络安全防线(510)

一、网络安全的基本概念 &#xff08;一&#xff09;网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…

关于vite+vue3+ts项目中env.d.ts 文件详解

env.d.ts 文件是 Vite 项目中用于定义全局类型声明的 TypeScript 文件。它帮助开发者向 TypeScript提供全局的类型提示&#xff0c;特别是在使用一些特定于 Vite 的功能时&#xff08;如 import.meta.env&#xff09;。以下是详细讲解及代码示例 文章目录 **1. env.d.ts 文件的…

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码&#xff0c;搜索一下发现是一个UUENCODE编码&#xff0c;用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片&#xff0c;应该是一个图片隐写&…

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊&#xff0c;大佬们。我们的python基础内容的这一篇终于写好了&#xff0c;啪唧啪唧啪唧…… 说实话&#xff0c;这一篇确实写了很久&#xff0c;一方面是在忙其他几个专栏的内容&#xff0c;再加上生活学业上的事儿&#xff0c;确实精力有限&#xff0c;另一方面&…

LabVIEW时域近场天线测试

随着通信技术的飞速发展&#xff0c;特别是在5G及未来通信技术中&#xff0c;天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试&#xff0c;传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势&#xff0c;可以提供更快速和精准的…

LabVIEW 程序中的 R6025 错误

R6025错误 通常是 运行时库 错误&#xff0c;特别是与 C 运行时库 相关。这种错误通常会在程序运行时出现&#xff0c;尤其是在使用 C 编译的程序或依赖 C 运行时库的程序时。 ​ 可能的原因&#xff1a; 内存访问冲突&#xff1a; R6025 错误通常是由于程序在运行时访问无效内…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统&#xff0c;广泛应用于FortiGate下一代防火墙&#xff0c;为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对在线考试等问题&#xff0c;对如何通过计算…

服务器迁移MySQL

由于公司原有的服务器不再使用&#xff0c;需要将老的服务器上的MySQL迁移到新的服务器上&#xff0c;因此需要对数据进行备份迁移&#xff0c;前提是两台服务器已安装相同版本的MySQL&#xff0c;这里就不再讲解MySQL的安装步骤了&#xff0c;可以安装包、可以在线下载、可以容…

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一&#xff1a;使用 float 普通盒子实现横向布局 方法二&#xff1a;使用 display: inline-block 内联块级元素实现横向布局 方法三&#xff1a;使用弹性盒子 flexbox&#xff0…

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9;横排转竖排&#x1f350;批量删除表格空白行&#x1f348;方法一方法二建辅助列找空值 能量站&#x1f61a; 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9; 选中单元格&#xff0c;单击右键➡️“设…