JS初识BOM

window对象

BOM (Browser Object Model) 是浏览器对象模型

  • window对象是一个全局对象,也可以说是JavaScript中的顶级对象
  • 像document、alert()、console.log() 这些都是window的属性,基本BOM的属性和方法都是window的
  • 所有通过var定义在全局作用域中变量、函数都会变成window对象的属性和方法
  • window对象下的属性和方法调用的时候可以省略window
    在这里插入图片描述

定时器-延迟函数

JavaScript 内置的一个用来让代码延迟执行的函数,叫setTimeout
语法:
setTimeout(回调函数, 延迟时间)
setTimeout仅仅执行一次,所以可以理解为就是把一段代码延迟执行,平时省略window
间歇函数setInterval:间隔一段时间就执行一次,平时省略window
清除延时函数:
clearTimeout(timerId)

<body>
  <script>
    // 定时器之延迟函数

    // 1. 开启延迟函数
    let timerId = setTimeout(function () {
      console.log('我只执行一次')
    }, 3000)

    // 1.1 延迟函数返回的还是一个正整数数字,表示延迟函数的编号
    console.log(timerId)

    // 1.2 延迟函数需要等待时间,所以下面的代码优先执行

    // 2. 关闭延迟函数
    clearTimeout(timerId)

  </script>
</body>

location对象

location(地址)它拆分保存了 URL 地址的各个组成部分,它是一个对象

属性 / 方法说明
href属性,获取完整的 URL 地址,赋值时用于地址的跳转
search属性,获取地址中携带的参数,符号 ? 后面部分
hash属性,获取地址中的哈希值,符号 # 后面部分
reload()方法,用来刷新当前页面,传入参数 true 时表示强制刷新
<body>
  <form>
    <input type="text" name="search"> <button>搜索</button>
  </form>
  <a href="#/music">音乐</a>
  <a href="#/download">下载</a>

  <button class="reload">刷新页面</button>
  <script>
    // location 对象  
    // 1. href属性 (重点) 得到完整地址,赋值则是跳转到新地址
    console.log(location.href)
    // location.href = 'http://www.itcast.cn'

    // 2. search属性  得到 ? 后面的地址 
    console.log(location.search)  // ?search=笔记本

    // 3. hash属性  得到 # 后面的地址
    console.log(location.hash)

    // 4. reload 方法  刷新页面
    const btn = document.querySelector('.reload')
    btn.addEventListener('click', function () {
      // location.reload() // 页面刷新
      location.reload(true) // 强制页面刷新 ctrl+f5
    })
  </script>
</body>

navigator对象

navigator是对象,该对象下记录了浏览器自身的相关信息
常用属性和方法:

  • 通过 userAgent 检测浏览器的版本及平台
// 检测 userAgent(浏览器信息)
(function () {
  const userAgent = navigator.userAgent
  // 验证是否为Android或iPhone
  const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
  const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
  // 如果是Android或iPhone,则跳转至移动站点
  if (android || iphone) {
    location.href = 'http://m.itcast.cn'
  }})();

histroy对象

history(历史)是对象,主要管理历史记录,该对象与浏览器地址栏的操作相对应,如前进、后退等

使用场景

history对象一般在实际开发中比较少用,但是会在一些OA办公系统中见到
请添加图片描述

常见方法:

history对象方法作用
back()可以后退功能
forward()前进功能
go(参数)前进后退功能,参数如果是 1 前进1个页面;如果是 -1 后退 1 个页面
<body>
  <button class="back">←后退</button>
  <button class="forward">前进→</button>
  <script>
    // histroy对象

    // 1.前进
    const forward = document.querySelector('.forward')
    forward.addEventListener('click', function () {
      // history.forward() 
      history.go(1)
    })
    // 2.后退
    const back = document.querySelector('.back')
    back.addEventListener('click', function () {
      // history.back()
      history.go(-1)
    })
  </script>
</body>

本地存储

本地存储:将数据存储在本地浏览器中
好处:

  1. 页面上刷新或者关闭不丢失数据,实现数据持久化
  2. 容量较大,sessionStorage 和 localStorage 约 5M 左右

localStorage

作用:数据可以长期保留在本地浏览器中,刷新页面和关闭页面,数据也不会丢失
特性:以键值对的形式存储,并且存储的是字符串,省略了window
请添加图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>本地存储-localstorage</title>
</head>

<body>
  <script>
    // 本地存储 - localstorage 存储的是字符串 
    // 1. 存储
    localStorage.setItem('age', 18)

    // 2. 获取
    console.log(typeof localStorage.getItem('age'))

    // 3. 删除
    localStorage.removeItem('age')
  </script>
</body>

</html>

sessionStorage

特性:

  1. 用法跟localStorage基本相同
  2. 区别是:当页面浏览器被关闭时,存储在 sessionStorage 的数据会被清除

存储:sessionStorage.setItem(key,value)
获取:sessionStorage.getItem(key)
删除:sessionStorage.removeItem(key)

localStorage存储复杂数据类型

问题:本地只能存储字符串,无法存储复杂数据类型
解决:需要将复杂数据类型转换成 JSON字符串,在存储到本地
语法JSON.stringify(复杂数据类型)
JSON字符串:

  • 首先是 1 个字符串
  • 属性名使用双引号引起来,不能单引号
  • 属性值如果是字符串型也必须双引号
<body>
  <script>
    // 本地存储复杂数据类型
    const goods = {
      name: '小米',
      price: 1999
    }
    // localStorage.setItem('goods', goods)
    // console.log(localStorage.getItem('goods'))

    // 1. 把对象转换为JSON字符串  JSON.stringify
    localStorage.setItem('goods', JSON.stringify(goods))
    // console.log(typeof localStorage.getItem('goods'))

  </script>
</body>

问题:因为本地存储里面取出来的是字符串,不是对象,无法直接使用
解决:把取出来的字符串转换为对象
语法:JSON.parse(JSON字符串)

<body>
  <script>
    // 本地存储复杂数据类型
    const goods = {
      name: '小米',
      price: 1999
    }
    // localStorage.setItem('goods', goods)
    // console.log(localStorage.getItem('goods'))

    // 1. 把对象转换为JSON字符串  JSON.stringify
    localStorage.setItem('goods', JSON.stringify(goods))
    // console.log(typeof localStorage.getItem('goods'))

    // 2. 把JSON字符串转换为对象  JSON.parse
    console.log(JSON.parse(localStorage.getItem('goods')))

  </script>
</body>

数组 map 方法

使用场景:

map 可以遍历数组处理数据,并且返回新的数组

语法:

<body>
  <script>
  const arr = ['red', 'blue', 'pink']
  // 1. 数组 map方法 处理数据并且 返回一个数组
   const newArr = arr.map(function (ele, index) {
    // console.log(ele)  // 数组元素
    // console.log(index) // 索引号
    return ele + '颜色'
	})
console.log(newArr) // ['red颜色', 'blue颜色', 'pink颜色']
</script>
</body>
map 也称为映射。映射是个术语,指两个元素的集之间元素相互“对应”的关系
map 重点在于有返回值,forEach没有返回值(undefined)

数组join方法

作用

join() 方法用于把数组中的所有元素转换一个字符串

语法

<body>
  <script>
    const arr = ['red', 'blue', 'pink']

    // 1. 数组 map方法 处理数据并且 返回一个数组
    const newArr = arr.map(function (ele, index) {
      // console.log(ele)  // 数组元素
      // console.log(index) // 索引号
      return ele + '颜色'
    })
    console.log(newArr)

    // 2. 数组join方法  把数组转换为字符串
    // 小括号为空则逗号分割
    console.log(newArr.join())  // red颜色,blue颜色,pink颜色
    // 小括号是空字符串,则元素之间没有分隔符
    console.log(newArr.join(''))  //red颜色blue颜色pink颜色
    console.log(newArr.join('|'))  //red颜色|blue颜色|pink颜色
  </script>
</body>
<think>我们正在总结JavaScript基础知识,包括四个部分:初识JS、变量与数据类型、流程控制语句、控制语句实例。根据引用内容,我们可以这样组织: 1. 初识JS:参考引用[1]和引用[2],介绍JavaScript是什么,它的组成和特点。 2. 变量与数据类型:参考引用[3]和引用[4],介绍变量声明、基本数据类型(值类型)和复杂数据类型(引用类型)。 3. 流程控制语句:介绍条件语句(if...else)、循环语句(for, while)等。 4. 控制语句实例:参考引用[5],展示一个使用循环和条件语句的实际例子(过滤数组)。 注意:引用[1]是一本书的简介,引用[2]介绍了JavaScript的概述,引用[3]和[4]涉及数据类型,引用[5]是一个控制语句的实例。 由于引用内容有限,我们主要结合已知知识进行总结,并在适当位置标注引用。 结构如下: ### JavaScript基础总结 #### 一、初识JS 1. JavaScript概述 2. JavaScript的组成 #### 二、变量与数据类型 1. 变量声明 2. 基本数据类型(值类型) 3. 复杂数据类型(引用类型) 4. 类型检测 #### 三、流程控制语句 1. 条件语句 2. 循环语句 #### 四、控制语句实例 1. 数组过滤实例 最后生成相关问题。 注意:在回答中,我们使用引用的地方在末尾标注引用标识,例如:[^2]</think>### JavaScript基础总结 #### 一、初识JS 1. **JavaScript概述** - 轻量级解释型/即时编译型语言,遵循**函数优先原则**[^2] - 组成核心: - **ECMAScript**:语言标准(语法、类型、语句等) - **DOM**:文档对象模型(操作HTML元素) - **BOM**:浏览器对象模型(操作浏览器窗口) - 核心特性: - 客户端脚本语言,为网页添加动态功能[^2] - 单线程事件循环机制 - 弱类型动态语言 2. **执行环境** ```javascript // 浏览器控制台输出 console.log("Hello, JavaScript!"); // 基础输出语句[^3] ``` - 嵌入HTML方式: ```html <script> // 内联脚本 </script> <script src="app.js"></script> <!-- 外部脚本 --> ``` --- #### 二、变量与数据类型 1. **变量声明** ```javascript var name = "Alice"; // ES5(函数作用域) let age = 25; // ES6(块级作用域) const PI = 3.14; // 常量(不可重新赋值) ``` 2. **数据类型分类** | 类型 | 示例 | 特性 | |-------------|-----------------------|--------------------------| | **值类型** | | 直接存储在栈内存 | | `number` | `42`, `3.14` | 整数/浮点数 | | `string` | `"Hello"`, `'JS'` | 文本序列 | | `boolean` | `true`, `false` | 逻辑值 | | `undefined` | `let a;` | 声明未赋值 | | `null` | `let b = null;` | 空对象指针[^3] | | **引用类型**| | 堆内存存储,栈存指针 | | `Array` | `[1, "text", true]` | 有序数据集合 | | `Object` | `{name: "Bob"}` | 键值对集合 | | `Function` | `function() {...}` | 可执行对象 | 3. **类型检测与转换** ```javascript // 类型检测 typeof 42; // "number" (基本类型) typeof []; // "object" (引用类型局限)[^4] // 类型转换 Number("123"); // 123 (显式转数字) String(true); // "true" (显式转字符串) Boolean(0); // false (显式转布尔) ``` --- #### 三、流程控制语句 1. **条件语句** ```javascript // if-else if (score >= 90) { console.log("A"); } else if (score >= 60) { console.log("及格"); } else { console.log("不及格"); } // switch-case switch (day) { case 1: console.log("周一"); break; case 2: console.log("周二"); break; default: console.log("周末"); } ``` 2. **循环语句** ```javascript // for循环 for (let i = 0; i < 5; i++) { console.log(i); // 0,1,2,3,4 } // while循环 let j = 0; while (j < 3) { console.log(j++); // 0,1,2 } // 遍历数组 const colors = ["red", "green", "blue"]; for (const color of colors) { console.log(color); } ``` --- #### 四、控制语句实例 1. **数组过滤** ```javascript // 过滤大于10的数字 [^5] const arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7]; const newArr = []; for (let i = 0; i < arr.length; i++) { if (arr[i] >= 10) { newArr.push(arr[i]); // 条件满足时推入新数组 } } console.log(newArr); // [77, 52, 25] ``` 2. **质数判断** ```javascript function isPrime(num) { if (num <= 1) return false; for (let i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) return false; // 发现因子则非质数 } return true; } console.log(isPrime(17)); // true ``` 3. **多层循环嵌套** ```javascript // 打印九九乘法表 for (let i = 1; i <= 9; i++) { let line = ""; for (let j = 1; j <= i; j++) { line += `${j}×${i}=${i*j}\t`; } console.log(line); } ``` --- ### 关键概念总结 | 主题 | 核心要点 | |--------------------|--------------------------------------------------------------------------| | **变量作用域** | `var`存在变量提升,`let/const`具有块级作用域 | | **类型转换陷阱** | `null + 11 = 11`,`null + "text" = "nulltext"` [^3] | | **循环优化** | 避免在循环内声明函数,优先使用`for-of`遍历可迭代对象 | | **严格模式** | `"use strict"` 禁止隐式全局变量,增强语法检查 | > 提示:引用类型赋值传递的是内存地址(浅拷贝),修改会影响所有引用该地址的变量[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值