08day-字符串,查询字符串 queryString

本文详细介绍了JavaScript中字符串的概念、创建方式、基本操作(如length属性、索引访问、遍历等)、常用方法(如charAt、charCodeAt、字符串转换等)以及处理查询字符串的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串

概念

  • 在js内用 单/双/反单引号 包裹的内容就是字符串
  • 字符串是一个 包装数据类型(String、Number、Boolean)

包装数据类型

  • 存储的时候,是以基本数据类型的形式去存
  • 当你使用的时候,他会瞬间转成 复杂数据类型 的样子让你使用
  • 当你使用完毕,瞬间转成 基本数据类型的形式去存储

创建

  1. 字面量
    let str = "hello world";
  let s1 = "hello world"
  let s2 = "hello world"
  1. 内置构造函数
    语法:let str = new String(“你想创建的字符串”)
    很少这样去创建字符串
    let str = "hello world";
    console.log(str.length);
    let s1 = "hello world"
    let s2 = "hello world"
    console.log(s1 === s2); // true

    let s3 = new String("hello world");
    let s4 = new String("hello world");
    console.log(s3);

    let n1 = 1;
    let n2 = new Number(1);
    console.log(n2);
    console.log(n2 == n1); // true
    console.log(n2 === n1); // false

    let b1 = true;
    let b2 = new Boolean(true);
    console.log(b2);
    console.log(b2 == b1); // true
    console.log(b2 === b1); // false

基本操作

  1. length属性
  • 是一个 只读 属性只能获取,不能设置
  • 读:
    • 语法:str.length
    • 获取到的就是该字符串的长度,也就是 str 由多少个字符组成
    • 注意:空格也算一个字符,中文也是
    let str = "hello world";
    console.log(str.length); // 11,空格也是一个字符
    str.length = 1; // 没有意义
    console.log(str);
    console.log(str.length);
  1. 索引属性
  • 只读
  • 读:
    • str[index]
    • 获取到的就是该字符串指定位置的那一个字符
    • 如果有该索引,就是对应的字符
    • 如果没有该索引,那就是undefined。
    let str = "hello world";
    console.log(str[4]); // o
    let str2 = new String("hello world");
    console.log(str2);

    str[4] = "z"; // 无意义
    console.log(str);
  1. 遍历字符串
    let str = "hello world";
    for(let i = 0; i < str.length; i++){
      console.log(str[i]);
    }

    for(key in str){
      console.log(str[key]);
    }

字符串的常用方法

  • 统一语法:str.xxx()
  • 注意:所有的字符串方法都不会修改原始的字符串,都是以返回值的形式给到我们
charAt()
  • str.charAt(索引)
  • 作用:用于获取索引位置上的字符
  • 如果没有该索引,则会返回一个空字符串给我们
    let str = "hello world";
    let res = str.charAt(4);
    console.log(res); // o
    console.log(str[100]); // undefined
    console.log(str.charAt(100)); // ""
charCodeAt()

作用:返回指定字符的unicode编码。
语法:str.charCodeAt(索引)

    let str = "hello world";
    let res = str.charCodeAt(0)
    console.log(res); // 104
    console.log("0".charCodeAt()); // 48
toUpperCase()
  • 作用:把所有字母转成大写
  • 语法:str.toUpperCase()
  • 返回值:转换好的字符串
toLowerCase()
  • 作用:把所有字母转换成小写
  • 语法:str.toLowerCase()
  • 返回值:转换好的字符串
    let str = "hello world";
    let res = str.toUpperCase();
    console.log(res); // HELLO WORLD
    let res2 = res.toLowerCase();
    console.log(res2);
substr
  • 作用:截取字符串
  • 语法:str.substr(开始索引,多少个)
substring
  • 作用:截取字符串
  • 语法:str.substring(开始索引,结束索引)
  • 包前不包后
    let str = "hello world";
    let res = str.substr(2,7);
    console.log(res);// llo wor
    let res2 = str.substring(2,7);
    console.log(res2); // llo w
slice()
  • 语法:str.slice(开始索引,结束索引)
  • 包前不包后,可以写负数
    let str = "hello world";
    // 表示【2】截取到【7】,包含2单不包含7
    let res = str.slice(2,-4);
    console.log(res); // llo w
replace()
  • 作用:替换字符
  • 语法:str.replace(换上字符,换下字符)
  • 注意:只能替换出现的第一个
  • 返回值:替换好的字符串
    let str = "hello world";
    let res = str.replace("l","*");
    console.log(res);
split()
  • 作用:将字符串进行分割
  • 返回值:一个数组,内容就是按照切割符号切开的每个部分
  • 语法:str.split(“符号”)
    • 可以不传参,会把整个字符串当作一个整体
    • 传递一个(“”),一位一位的切割
    • 传递一个(" "),以空格作为切割符
    let str = "hello world";
    let res = str.split();
    console.log(res);// ['hello world']
    let res2 = str.split("");
    console.log(res2);// ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
    let res3 = str.split(" ");
    console.log(res3); //  ['hello', 'world']

    let res4 = str.split("l");
    console.log(res4);
concat()
  • 作用:拼接字符串
  • 语法:str.concat(字符串)
  • 返回值:拼接好的字符串
indexOf
lastIndexOf
trim()
  • 语法:str.trim()
  • 作用:去除字符串首位的空白内容
    let str = "       hello world     ";
    console.log(str);//        hello world     
    let res = str.trim() 
    console.log(res); // hello world

查询字符串 queryString

  • 我们把所有被引号包裹的内容叫做字符串
  • 因为字符串填充的内容不一样,我们做了一些细致分类
    • 全部由数字组成的字符串:“数字字符串”
      • “123456789”
    • 带有HTML格式的字符串:html字符串
      • abcd

    • 查询字符串
      • key=value&key=value
      • name=zhangsan&password=123456&gender=男
  • 把一个信息变成 查询字符串的形式
  • 把查询字符串 格式变成一个信息
    let yhInfo = {
      name:"ZD",
      age:18,
      gender:"男",
      password:"123456",
    }
    // 1.
    function queryStringFn(obj){
      let str = ""
      for(let key in obj){
        str += key + "=" + obj[key] + "&";
      }
      str = str.slice(0,-1);

      return str;
    }
    let yhQueryString = queryStringFn(ZDInfo);
    console.log(ZDQueryString);
      function parseQueryString(str, key) {

        let obj = {};

        // 2-1
        let tmpArr = str.split("&");
        // ["name=yh","age=18"]

        // 3. 遍历tmpArr
        tmpArr.forEach(function (item) {
          let t = item.split("=");
          // ["name","ZD"]
          let key = t[0];
          let value = t[1];
          obj[key] = value;
        });
        // if (key) {
        //   return obj[key];
        // } else {
        //   return obj;
        // }
        // obj[key] ? key = key : key = undefined;
        return key ? obj[key] : obj;

      }
      let parserYhInfo = parseQueryString(yhQueryString,"aaa");
      console.log(parserYhInfo);
<think>好的,我需要解释用户的问题,关于VB.NET中DateDiff函数与字符串格式化组合使用的逻辑及作用。首先,我得回忆一下DateDiff函数的基本用法。DateDiff用于计算两个日期之间的时间间隔,比如天数、月份、年份等。它的参数包括间隔类型、开始日期和结束日期,可能还有更多可选参数。然后,字符串格式化通常是指使用Format函数将日期转换为特定格式的字符串,比如yyyy-MM-dd这样的格式。 用户提到的是这两者的组合使用,可能是在计算日期差之后将结果以特定格式显示,或者在计算过程中需要格式化输入的日期字符串。例如,可能有一个场景是用户输入两个字符串格式的日期,先用Format函数处理,再用DateDiff计算它们的差值。这时候需要确保字符串能被正确转换为日期类型,否则会出错。 接下来,我需要查阅提供的引用资料,看看有没有相关的信息。引用1提到了CDate函数,可以将有效的日期时间表达式转换为Date类型,这可能很重要,因为处理字符串日期时,转换是必须的。引用4提到了Trim函数,可能在处理用户输入的日期字符串时,去除多余的空格,避免转换错误。Format函数也在引用1中提到,用于格式化输出。 可能的代码逻辑步骤可能是这样的:首先获取用户输入的日期字符串,使用Trim清理空格,然后用CDate转换为日期类型,接着用DateDiff计算两者的差异,最后用Format将结果或日期格式化为需要的字符串形式。例如,计算两个日期之间的天数差,并显示为“相差X天”,其中X是DateDiff的结果。 需要注意的地方包括:日期转换的安全性,比如使用CDate时是否有异常处理;日期格式的兼容性,不同区域设置可能会影响字符串到日期的转换;还有DateDiff的间隔参数是否正确设置,比如"d"代表天,"m"代表月等。 此外,用户的问题可能涉及到实际应用,比如计算工龄、项目周期等,这时候正确的日期计算和格式化显示就很重要。例如,计算两个日期之间的完整年数,可能需要使用DateDiff的"yyyy"间隔,但需要注意是否跨过了月份或日期,这时候可能需要进一步调整。 总结一下,组合使用DateDiff和字符串格式化的逻辑可能是:输入处理(清理和转换)→日期计算→结果格式化输出。需要确保每个步骤的正确性,避免转换错误或计算错误。同时,引用资料中的函数如CDate、Trim、Format都是关键部分,需正确使用。</think>在VB.NET中,`DateDiff`函数与字符串格式化组合使用时,主要用于**精确计算日期时间差并实现可视化输出**,其逻辑可分为三个关键步骤: --- ### 一、DateDiff函数基础 `DateDiff`函数语法为: ```vbnet DateDiff(Interval As DateInterval, Date1 As DateTime, Date2 As DateTime) As Long ``` - **间隔类型**:通过`DateInterval.Day`/`DateInterval.Month`等枚举值指定计算单位 - **日期参数**:需确保输入为合法的`DateTime`类型 - **返回值**:返回两个日期在指定单位下的差值 示例:计算两个日期的月份差 ```vbnet Dim months = DateDiff(DateInterval.Month, #2023/1/15#, #2023/4/20#) '返回3 ``` --- ### 二、字符串格式化关键环节 #### 1. 输入预处理 通过`Trim()`清理用户输入的空格,并用`CDate()`进行类型转换: ```vbnet Dim dateStr1 As String = " 2023-05-01 " Dim date1 As Date = CDate(dateStr1.Trim()) '转换为2023/5/1 ``` #### 2. 结果格式化 使用`Format()`函数控制输出样式: ```vbnet Dim diffDays = DateDiff(DateInterval.Day, startDate, endDate) Dim output = $"相差天数:{diffDays.ToString("N0")} 天" '格式化为"1,024 天" ``` --- ### 三、组合应用场景 #### 工龄计算案例 ```vbnet Dim joinDate As Date = CDate(txtJoinDate.Text.Trim()) Dim currentDate As Date = Date.Now Dim workYears = DateDiff(DateInterval.Year, joinDate, currentDate) ' 精确到年月 If currentDate < joinDate.AddYears(workYears) Then workYears -= 1 '未满整年时修正 End If Dim result = $"工龄:{workYears} 年" ``` --- ### §§ 1. 如何避免`CDate`转换失败导致的运行时错误? *建议使用`DateTime.TryParse`进行安全转换[^4]* 2. `DateDiff`计算月份差时遇到月末日期有何特殊处理? *例如2023-01-31到2023-02-28的月份差为1个月[^1]* 3. 如何实现多语言环境下的日期格式化? *需结合`CultureInfo`使用`ToString("格式", culture)`[^5]* 4. `DateInterval.Weekday`与`DateInterval.Day`有何区别? *`Weekday`会跳过周末计算工作日差异[^2]*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值