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

news2025/1/19 17:30:03

前面两章的摘要

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.prototype
        console.log(hd instanceof Array);//true
        console.log(hdcms instanceof Array);//false
        function 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)//20
        console.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('第'))//6
        console.log(hd.indexOf('一', 7))//7
        console.log(hd.indexOf('一', 8))//-1
        console.log(hd.indexOf('二'))//-1

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

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

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

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

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

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

改为5则输出-1

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

  let hd = "想品客老师的第一天"
        console.log(hd.startsWith('想'))//true
        console.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'))//true

        const word = ["@@", "css"];
        const string = "我喜欢在后盾人学习php与css知识";
        const status = word.some(word => {
            return string.includes(word);
        });
        if (status) {//在string字符串里找word
            console.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 = 0
        console.log(typeof n)//number
        console.log(n == true)//false,n为false

        console.log(typeof !n)//boolean
        console.log(!n == true)//true,n本来为false,感叹号进行了类型转换+取反

        console.log(typeof !!n)//boolean
        console.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.length
            let 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.coloradmin.cn/o/2278994.html

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

相关文章

leetcode刷题记录(六十七)——21. 合并两个有序链表

&#xff08;一&#xff09;问题描述 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09;21. 合并两个有序链表 - 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a;[https://assets.leetcode…

学习微信小程序的下拉列表控件-picker

1、创建一个空白工程 2、index.wxml中写上picker布局&#xff1a; <!--index.wxml--> <view class"container"><picker mode"selector" range"{{array}}" bindchange"bindPickerChange"><view class"pick…

大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!

myController S570 具有较高的数据采集速度和远程控制能力&#xff0c;大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼&#xff0c;具有 14 个关节、2 个操纵杆和 2 个按钮&#xff0c;它提供高数据采集速度&#xff0c;出色的兼容性&#xff0c…

【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器

一、引言(Introduction) GaN HEMT的重要性 文章开篇便强调了氮化镓(GaN)高电子迁移率晶体管(HEMT)在下一代功率转换系统中的巨大潜力。GaN HEMT具备高开关频率、低导通电阻、高击穿电压以及宽工作温度范围等优势,使其成为功率电子领域的热门研究对象。这些特性使得GaN…

ComfyUI-PromptOptimizer:文生图提示优化节点

ComfyUI-PromptOptimizer 是 ComfyUI 的一个自定义节点&#xff0c;旨在优化文本转图像模型的提示。它将用户输入的提示转换为更详细、更多样化、更生动的描述&#xff0c;使其更适合生成高质量的图像。无需本地模型。 1、功能 提示优化&#xff1a;优化用户输入的提示以生成…

Linux-day08

第17章 大数据定制篇-shell编程 shell编程快速入门 shell变量 设置环境变量 把行号打开 set nu 位置参数变量 预定义变量 在一个脚本中执行了另外一个脚本所以卡住了 CTRLC退出 运算符 operator运算符 条件判断 流程控制 单分支多分支 case语句 for循环 反复的把取出来的i值…

ExpGCN:深度解析可解释推荐系统中的图卷积网络

一、引言 在当今信息爆炸的时代&#xff0c;推荐系统已成为电子商务和社交网络中不可或缺的工具&#xff0c;旨在为用户筛选出符合其兴趣的信息。传统的协同过滤&#xff08;CF&#xff09;技术通过挖掘用户与项目之间的交互记录来生成推荐&#xff0c;但这种方法简化了模型&a…

蓝桥杯3526 子树的大小 | 数学规律

题目传送门 这个题目是一个数学题&#xff0c;比较好的方法是从上往下寻找子树的最左和最右的结点&#xff0c;每层统计子结点数&#xff0c;到树的底部时打印结果。 如何求最左、最右的子结点呢&#xff1f; 对于第i个结点,其前面有i-1个结点,每个结点各有m个孩子,再加上1号结…

大语言模型的语境中“越狱”和思维链

大语言模型的语境中“越狱”和思维链 越狱(Jailbreaking) 含义:在大语言模型的语境中,“越狱”是指用户试图绕过语言模型的安全限制和使用规则,让模型生成违反伦理道德、包含有害内容(如暴力、歧视、恶意软件代码等)的输出。这些安全限制是由模型开发者设置的,目的是确…

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…

【实践】操作系统智能助手OS Copilot新功能测评

一、引言 数字化加速发展&#xff0c;尤其人工智能的发展速度越来越快。操作系统智能助手成为提升用户体验与操作效率的关键因素。OS Copilot借助语言模型&#xff0c;人工智能等&#xff0c;对操作系统的自然语言交互操作 推出很多功能&#xff0c;值得开发&#xff0c;尤其运…

人物一致性训练测评数据集

1.Pulid 训练:由1.5M张从互联网收集的高质量人类图像组成,图像标题由blip2自动生成。 测试:从互联网上收集了一个多样化的肖像测试集,该数据集涵盖了多种肤色、年龄和性别,共计120张图像,我们称之为DivID-120,作为补充资源,还使用了最近开源的测试集Unsplash-50,包含…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程&#xff0c;这个版本是我的第一版&#xff0c;使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假&#xff0c;训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

网络编程 | UDP套接字通信及编程实现经验教程

1、UDP基础 传输层主要应用的协议模型有两种&#xff0c;一种是TCP协议&#xff0c;另外一种则是UDP协议。在上一篇博客文章中&#xff0c;已经对TCP协议及如何编程实现进行了详细的梳理讲解&#xff0c;在本文中&#xff0c;主要讲解与TCP一样广泛使用了另一种协议&#xff1a…

【Linux】线程全解:概念、操作、互斥与同步机制、线程池实现

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;一、线程概念 &#x1f4d6; 回顾进程 &#x1f4d6; 引入线程 &#x1f4d6; 总结 &a…

掌握未来:从零开始学习生成式AI大模型!

随着人工智能技术的飞速发展&#xff0c;生成式AI大模型已成为当今科技领域的热点。从文本生成、图像创作到音乐创作&#xff0c;生成式AI大模型在各个领域展现出惊人的潜力。本文将带领大家从零开始&#xff0c;逐步学习生成式AI大模型&#xff0c;掌握未来的关键技术。 一、生…

多肽合成 -- 液相合成(liquid-phase peptide synthesis (LPPS))

液相合成的定义 液相合成&#xff08;Solution Synthesis&#xff09;是指在液体介质中进行的化学合成反应&#xff0c;是化学合成中一种基本且重要的方法。它涉及到将反应物溶解在溶剂中&#xff0c;在一定的温度、压力和其他反应条件下进行化学反应&#xff0c;从而生成所需的…

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q&#xff1a;怎样修改HPS Timer 0定时器产生的中断周期&#xff1f; A&#xff1a;在上一期实验的基础上&#xff0c;可以修改按键中断服务程序&#xff0c;实现红色LED上的计数值递增的速率&#xff0c;主程序和其余代码文件不用修改。 实现以下功能&#xff1a;按下KEY0…

ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT

文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史&#xff1a;从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …