【JavaScript】查询字符串、JSON字符串、时间对象、定时器、同步异步、BOM

一、查询字符串

queryString一种字符串格式
JS 把字符串分为几种格式
1. 普通字符串 ‘adsfasfasksdfhaiu’
2. 数字字符串 ‘234234234’
3. html字符串
4. 查询字符串 ‘key=value&key1=value1&key2=value2’

  • 一条信息 key=value
  • 多条信息 用&链接

案例一:把查询字符串转为对象类型

 // 1. 把 查询字符串 转为 对象类型
  var str = "username=小花&phone=123456";
  function parseQueryString(str) {
    // 1-1. 准备一个空对象
    var obj = {};
    // 1-2. 把str数据解析出来放在obj中 有几条数据放几  按照 & 拆分
    var r1 = str.split("&");
    // 1-3. 把数组r1里面的内容依次放到obj中   遍历
    r1.forEach(function (item) {
      // 1-4 把每一条信息按照=分割
      var t = item.split("=");
      // 1-5 = 左边的就是 key , = 右边的是value
      var key = t[0];
      var value = t[1];
      obj[key] = value;
    });
    return obj;
  }

  var res = parseQueryString(str);

案例二:把 对象转为查询字符串

// username=小花&phone=123456
var obj = {
  username: "小花",
  phone: 123456,
};

function queryStringify(obj) {
  // 1. 准备一个空字符串
  var str = "";


  for (var k in obj) {
    // k 是啥
    console.log(k, obj[k]);
    // username='小花'&
    str += `${k}=${obj[k]}&`;
  }
  // 最后多一个&, 截取掉
  str = str.slice(0, -1);
  console.log(str);
  return str;
}

var str = queryStringify(obj);

二、JSON字符串

json格式字符串
-> ‘{“username”: “小花”, “phone”: “123456”}’
-> ‘[ {“username”: “小花”} , {“username”: “小明”} ]’
特点
1. 对象中的key value都要用双引号包裹起来
2. 数字 和 布尔 可以不包裹
3. 不接受函数

案例一:把 json格式转为 js格式

‘{“username”: “小花”, “phone”: “123456”}’
语法 JSON.parse(json格式字符串)

 var str = '{"username": "小花", "phone": "123456"}';
    var res = JSON.parse(str);
    console.log(res);

  
      
 

案例二:把 js格式 转为 json 格式字符串

语法 JSON.stringify(js数据结构)

var obj = { name: "小花", age: 18 };
var str = JSON.stringify(obj);
console.log(str);

三、时间对象

1. 时间对象的创建

    构造函数方式创建 
    var 变量名 = new Date()

2. 指定日期的创建

1) new Date() 只写一个数字
        表示 从格林威治时间 往后顺延的毫秒数
2) new Date() 写多个数字
        按照顺序 表示 年 月 日 时 分 秒 毫秒
        - 月 从0开始 0表示1月
        - 毫秒不展示
3) new Date 写字符串
        new Date('YYYY-MM-DD HH:mm:ss')
        new Date('YYYY/MM/DD HH:mm:ss')
//   var date = new Date();
  //   console.log(date);

  // 只写一个数字
  //   var date = new Date(1000);
  //   console.log(date);

  // 设置多个数字
  //   var date = new Date(2021, 10, 10, 1);
  //   console.log(date);

  // 写字符串

    var date = new Date("2008-8-8 10:00:10");
    var date = new Date("2008/8/8 10:00:10");
    console.log(date);
onsole.log(date.toLocaleString());

3.时间对象的方法

    基础单词
        get     获取
        set     设置 
        year     年
        month    月
        date     日
        week     周
        hour     小时
        minutes   分钟
        seconds   秒
get时间对象的获取方法
  1. getFullYear() 获取年
  2. getMonth() 获取月
  3. getDate() 获取日期
  4. getDay() 获取星期
  5. getHours() 获取小时
  6. getMinutes() 获取分钟
  7. getSeconds() 获取秒
var date = new Date();
console.log(date.getFullYear());
console.log(date.getMonth());
console.log(date.getDate());
console.log(date.getDay());
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
set时间对象的设置方法
  1. setFullYear() 获取年
  2. setMonth() 获取月
  3. setDate() 获取日期
  4. setHours() 获取小时
  5. setMinutes() 获取分钟
  6. setSeconds() 获取秒

💡注意设置方法里面没有设置星期

var date = new Date();

  /* 
    1. setFullYear() 设置年
  */

    date.setFullYear(2008);
    console.log(date);

  /* 
    2. setMonth() 设置月
      月 从0开始 最大是11
  */
    date.setMonth(9);
    console.log(date.toLocaleString());

  /* 
    3. setDate() 设置日期
  */

    date.setDate(1);
    console.log(date);

  /* 
    4. setHours 设置时 
  */
    date.setHours(8);
    console.log(date);

  /* 
    5. setMinutes 设置分
*/
    date.setMinutes(1);
    console.log(date);

  /* 
    6. setSeconds() 设置秒
  */
  date.setSeconds(1);
  console.log(date);

4.时间戳

时间戳
从 格林威治时间 到现在的毫秒数
获取
日期对象.getTime()
设置
日期对象.setTime()

var date = new Date();
  //   console.log(date.getTime());
  // 设置
  date.setTime(1000);
  console.log(date);

四.定时器

1. 定时器分类
  • 延迟定时器
    • 语法 setTimeout(function(){}, 毫秒数)
    • 作用 隔一段时间之后执行
  • 间隔定时器
    • 语法 setInterval(function(){}, 毫秒数)
    • 作用 每隔一段时间执行一次
// 1. 延迟定时器
    setTimeout(function () {
      console.log("执行了。。。");
    }, 2000);

  // 2. 间隔定时器
    setInterval(function () {
      console.log("执行了...");
    }, 2000);
2. 定时器的返回值
  • 返回值 数字
  • 作用 用来关闭定时器
// 定时器的返回值
  var t1 = setTimeout(function () {
    console.log("执行了延迟定时器");
  }, 1000);


  var t2 = setInterval(function () {
    console.log("执行了间隔定时器");
  }, 1000);


  console.log(t1, "t1");
  console.log(t2, "t2");
3. 关闭定时器

语法

  • clearTimeout(定时器)
  • clearInterval(定时器)
<body>
  <button id="btn">关闭</button>
</body>
<script>

 // 关闭定时器
  var t1 = setTimeout(function () {
    console.log("执行了延迟定时器");
  }, 1000);

  var t2 = setInterval(function () {
    console.log("执行了间隔定时器");
  }, 1000);

  btn.onclick = function () {
    // 关闭定时器
    // clearTimeout(t1);
    // clearTimeout(t2);
    clearInterval(t1);
    clearInterval(t2);
  };

</script>
案例一:页面时钟
/* 要求:
   在页面上展示一个时钟 隔1s更新一次
   效果:
   xx年xx月xx日 星期x xx:xx:xx
 */

  // 封装一个函数, 数字是一位数的时候,前面补0
  function format(num) {
    return num > 10 ? num : "0" + num;
  }

  function dateStr() {
    var str = "";

    // 获取日期
    var date = new Date();
    // 解析 获取每一个部分
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();

    var week = date.getDay();

    var weekStr = "日一二三四五六";
    week = "星期" + weekStr[week];

    var h = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();

    str = `${year}${month}${day}${week}  ${format(h)}:${format(
      m
    )}:${format(s)}`;

    return str;
  }

  box.innerHTML = dateStr();

  setInterval(function () {
    box.innerHTML = dateStr();
  }, 1000);
案例二:倒计时
    /*
    设置未来时间  1.14 
    距离 1. 14还有  x日x时x分x秒
	分析:
    时间戳相减
    */
/* 

function countDay() {
  var str = "";

  var futureTime = new Date("2023/1/14");
  var currentTime = new Date();

  var time = parseInt((futureTime - currentTime) / 1000);

  var day = parseInt(time / (24 * 60 * 60));
  var h = parseInt((time % (24 * 60 * 60)) / (60 * 60));
  var m = parseInt((time % (60 * 60)) / 60);
  var s = time % 60;

  // str = `${day}天${h}时${m}分${s}秒`;
  str = day + "天" + h + "时" + m + "分" + s + "秒";
  return str;
}

box.innerHTML = countDay();

setInterval(function () {
  box.innerHTML = countDay();
}, 1000);
案例三:抽奖案例
<style>
  div {
    width: 500px;
    height: 100px;
    border: 5px solid red;
    margin: 50px auto;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 50px;
  }
  body {
    text-align: center;
  }
</style>
<body>
  <div id="box">开始抽奖</div>
  <button id="start">开始</button>
  <button id="end">结束</button>
</body>
<script>
var arr = [
"谢谢惠顾",
"再来一次",
"身体健康",
"试卷一套",
"想屁吃",
"彩票一张",
"沙县小吃",
"劳斯莱斯五元优惠券",
"别墅一套",
"袜子一双",
"霸王洗发水",
];

// 需求 点击 box开始抽奖 再次点击停止抽奖
// 开始抽奖 ---- 不断的从arr中随机产生一项,放到box中

// 1. 定时器
// 2. 生成一个随机数  0 ~ 9
// 3. 放到box box.innerHTML

// 生成随机数
function randNum(min, max) {
return Math.round(Math.random() * (max - min) + min);
}

var flag = false; // 当前抽奖的状态
var t = null; // 准备一个变量 ,接受定时器结果

box.onclick = function () {
if (!flag) {
// 开始抽奖
t = setInterval(function () {
// 生成一个0 ~ 9的随机数
var num = randNum(0, 9);
var text = arr[num];
box.innerHTML = text;
}, 200);
// 把抽奖的状态改成正在抽奖
flag = true;
} else {
// 停止抽奖 做的是什么事情
flag = false;
clearInterval(t);
}
};
  </script>
案例四:抽奖案例按钮版
<style>
      div {
        width: 500px;
        height: 100px;
        border: 5px solid red;
        margin: 50px auto;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 50px;
      }
      body {
        text-align: center;
      }
</style>

  <body>
    <div id="box">开始抽奖</div>
    <button id="start">开始</button>
    <button id="end">结束</button>
  </body>
<script>
  var arr = [
    "谢谢惠顾",
    "再来一次",
    "身体健康",
    "试卷一套",
    "想屁吃",
    "彩票一张",
    "沙县小吃",
    "劳斯莱斯五元优惠券",
    "别墅一套",
    "袜子一双",
    "霸王洗发水",
  ];


  // 点击开始按钮 开始抽奖
  // 点击结束按钮 结束抽奖


  var t = null; // 用来接受 定时器的结果


  // 生成随机数
  function randNum(min, max) {
    return Math.round(Math.random() * (max - min) + min);
  }


  start.onclick = function () {
    // 根据t判断是否应该生成一个定时器


    if (t) {
      return;
    }
    t = setInterval(function () {
      // 生成一个0 ~ 9的随机数
      var num = randNum(0, 9);
      var text = arr[num];
      box.innerHTML = text;
    }, 200);
  };
  end.onclick = function () {
    clearInterval(t);
    t = null;
  };
</script>

五.初识同步异步

代码的异步执行

  • 什么是非异步执行代码
    • 按照从上到下的顺序, 从左到右顺序
    • 如果上一句没有执行完,那么下一句代码等待
  • 什么是异步代码
    • 当代码执行遇到异步的时候,会把该代码放到 异步队列 中等待
    • 等所有的同步代码代码完毕,开始执行 异步队列 的代码
    • 两个定时器都是异步代码
  • 两个定时器
    • 都是异步代码
    • 都是先执行定时器外面的代码,后执行定时器里面的代码
  // console.log(1);
  // for (var i = 1; i < 100000; i++) {}
  // console.log(2);

  // console.log(1);
  // setTimeout(() => {
  //   console.log("异步代码");
  // }, 2000);
  // console.log(2);

console.log(1);
setTimeout(() => {
  console.log("异步代码");
}, 0);
console.log(2);

六.BOM介绍

BOM Browser Object Modal
  • 统一语法 window.xx
    window介绍
    - 浏览器内置的一个对象,包含操作浏览器的方法
    x , window可以不写
    示例 alert() window.alert()
  • 特点
    1. 在各个浏览器表现不一
    2. 不能用css控制
console.log(window.innerHeight);
console.log(window.innerWidth);
文档窗口的尺寸
    宽度   document.documentElement.clientWidth
    高度   document.documentElement.clientHight

注意 获取的尺寸不包含滚动条的,滚动条是浏览器的内容

	console.log(document.documentElement.clientHeight);
  console.log(document.documentElement.clientWidth);
  console.log("========");
  console.log(window.innerHeight);
  console.log(window.innerWidth);
浏览器的弹出层
浏览器的弹出层
            1. 提示框
        - 语法  window.alert('提示文本')
        - 形式  一个提示文本 + 一个确认
            2. 询问看 
        - 语法 window.confirm('提示文本')
        - 形式 一个提示文本 + 确认 + 取消
        - 返回值
             认
                             false 点击取消
            3. 输入框
        - 语法 window.prompt('提示文本')
        - 形式 一个输入框 + 确认 + 取消
        - 返回值
             内容的字符串格式
                             点击取消 null
  //   var res = window.confirm("提示文本");
  //   console.log(res);
  var res = window.prompt("提示文本");
  console.log(res);
浏览器的常见事件
  1. load
  • 语法 window.onload = function() {}
  • 作用 当页面所有外部资源(img js 音频 视频)加载完毕之后触发
  1. resize
  • 语法 window.onresize = function() {}
  • 作用 页面尺寸发生修改的时候触发
  1. scroll
  • 语法 window.onscroll = function() {}
  • 作用 页面滚动条发生改变的时候触发
  window.onload = function () {
    console.log("资源加载完毕");
  };

  window.onresize = function () {
    console.log("尺寸改变了");
  };

 window.onscroll = function () {
    console.log("滚");
  };
浏览器的地址栏组成
  1. 协议 两台电脑通信,必须添加协议(http https file ftp), 浏览器会自动补全协议
  2. 域名(ip) 电脑的唯一表示,由于ip地址不方便记忆,产生了域名
  3. 端口
    端口可以自由分配, 只要没有占用,就可以使用
    http 默认端口 80
    https 默认端口443
  4. 路径 找到文件的地址 用/分割
  5. 数据 地址栏可以携带内容, 携带的内容用?拼接在地址栏后面,如果有多条数据,用&符号进行链接
  6. 哈希值(hash) 地址栏后面可以携带哈希值(#拼接在后面),用来进行单页面跳转
操作地址栏 - location对象
  1. href属性 读写浏览器地址栏的内容
    - 读
    -> 语法 window.location.href
    -> 得到是该页面在地址栏完整的地址
    - 写
    -> 语法 window.location.href = ‘地址’
    -> 作用 修改地址栏的地址 跳转
  2. search属性 获取地址栏上面的数据(查询字符串的内容), 包含问号
    - window.location.search
  3. hash属性 获取地址栏上面的hash值 包含#
    - window.location.hash
  4. reload方法
    - 语法 window.location.reload
    - 作用 重新加载页面(刷新)
//   console.log(window.location.href);

  //   box.onclick = function () {
  //     window.location.href = "http://www.baidu.com";
  //   };

  // search
  //   console.log(window.location.search);

  // hash
  //   console.log(window.location.hash);

  // reload
  reload.onclick = function () {
    window.location.reload();
  };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果Cake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值