文章目录
- [一、JavaScript 是什么?](#一、JavaScript 是什么?)
- [二、JS 的三种引入方式](#二、JS 的三种引入方式)
- 三、变量与常量
- 四、数据类型
- 五、运算符
- 六、流程控制
- 七、数组
- 八、函数
- 九、对象(Object)
- 十、字符串(String)
- 十一、内置对象
- [十二、DOM 操作](#十二、DOM 操作)
- 十三、事件基础
- [十四、BOM 操作](#十四、BOM 操作)
- 十五、本地存储
- 十六、异步与同步
- 十七、闭包
- 十八、原型与原型链(极简版)
- [十九、ES6+ 常用新特性](#十九、ES6+ 常用新特性)
提示:以下是本篇文章正文内容,下面案例可供参考
一、JavaScript 是什么?
JavaScrip 是一种轻量级、解释型、弱类型、基于原型的脚本语言。
主要作用:实现网页交互(点击、弹窗、动画、数据请求等)。
三大前端核心:
HTML:结构(骨架)
CSS:样式(皮肤)
JavaScript:行为(动作)
二、JS 的三种引入方式
- 行内式
java
<button onclick="alert('hello')">点击</button>
- 内嵌式
java
<script>
alert('Hello JavaScript')
</script>
- 外链式
java
<script src="index.js"></script>
注意:外链式 script 标签中间不能写代码。
三、变量与常量
- 定义变量
java
let age = 18
let name = '小明'
- 定义常量(不可修改)
java
const PI = 3.14159
- 命名规则
- 只能由字母、数字、下划线、$ 组成
- 不能以数字开头
- 严格区分大小写
- 不能是关键字(let、const、var、function 等)
- 推荐:见名知意(userName、age)
- var /let/const 区别
以下是整理后的变量声明关键字对比表格,符合Markdown格式要求:
变量声明关键字对比
| 关键字 | 作用域 | 重复声明 | 变量提升 | 重新赋值 |
|---|---|---|---|---|
| var | 函数级 | 允许 | 有 | 允许 |
| let | 块级 | 不允许 | 有(暂时性死区) | 允许 |
| const | 块级 | 不允许 | 有(暂时性死区) | 不允许 |
建议 :优先使用 const → 必要时使用 let → 避免使用 var
四、数据类型
JS 数据类型分为 基本数据类型 和 引用数据类型。
- 基本数据类型(7 种)
- Number:数字(1, 3.14, NaN, Infinity)
- String:字符串(' 单引号 '、"双引号"、反引号)
- Boolean:布尔(true /false)
- Undefined:未定义(只声明不赋值)
- Null:空(手动清空)
- Symbol:独一无二的值(ES6)
- BigInt:大整数(ES2020)
- 引用数据类型(1 种)
- Object
包含:对象、数组、函数、日期、正则等
- 检测数据类型
java
typeof 123 // "number"
typeof 'abc' // "string"
typeof true // "boolean"
typeof undefined // "undefined"
typeof null // "object"(历史bug)
typeof [] // "object"
typeof {} // "object"
typeof function(){} // "function"
- 数据类型转换
- 转字符串
java
String(123)
123 + ''
num.toString()
- 转数字
java
Number('123')
parseInt('123px') // 123
parseFloat('3.14') // 3.14
- 转布尔
java
Boolean(0) // false
Boolean('') // false
Boolean(NaN) // false
Boolean(null) // false
Boolean(undefined)// false
只有这 5 个是假值,其余都是真值
五、运算符
- 算术运算符
java
+ - * / % ++ --
- 赋值运算符
java
= += -= *= /= %=
- 比较运算符
java
== // 只比较值
=== // 既比较值也比较类型(推荐!)
!= !== > < >= <=
- 开发永远优先使用 === 严格相等
- 逻辑运算符
java
&& 与(全真为真)
|| 或(一真为真)
! 非(取反)
- 三元运算符
- 条件 ? 满足时执行 : 不满足时执行
六、流程控制
- if 条件语句
java
if (age >= 18) {
console.log('成年')
} else if (age >= 12) {
console.log('青少年')
} else {
console.log('儿童')
}
- switch 语句
java
switch (week) {
case 1: console.log('周一'); break
case 2: console.log('周二'); break
default: console.log('未知')
}
- 循环语句
for 循环(最常用)
java
for (let i = 0; i < 10; i++) {
console.log(i)
}
while 循环
java
let i = 0
while (i < 10) {
i++
}
do while 循环
java
do {
i++
} while (i < 10)
- break 和 continue
- break:跳出整个循环
- continue:跳过本次循环,继续下一次
七、数组
数组是有序的数据集合。
- 创建数组
java
let arr = [1, 2, 3, 'a', true]
- 访问数组
java
arr[0] // 1
- 数组长度
java
arr.length
- 常用数组方法
java
arr.push() // 末尾添加
arr.pop() // 末尾删除
arr.unshift() // 开头添加
arr.shift() // 开头删除
arr.splice() // 删除/替换/插入
arr.slice() // 截取
arr.forEach() // 遍历
arr.map() // 映射新数组
arr.filter() // 过滤
arr.find() // 查找第一个满足元素
arr.every() // 全部满足
arr.some() // 有一个满足
arr.reduce() // 累计计算
arr.includes() // 是否包含
arr.indexOf() // 查找索引
arr.join() // 转字符串
arr.sort() // 排序
arr.reverse() // 反转
八、函数
函数是封装一段可重复使用的代码块。
- 函数声明
java
function 函数名(参数) {
return 返回值
}
- 函数调用
- 函数名()
- 函数参数
- 形参:定义时的参数
- 实参:调用时的参数
- return
函数遇到 return 立即停止执行
return 后面的值是函数返回结果
没有 return 默认返回 undefined - 匿名函数
java
let fn = function() {}
- 箭头函数(ES6)
java
const fn = () => {}
- 特点:
- 写法更简洁
- 没有自己的 this
- 没有 arguments
- 不能当构造函数
- 作用域
- 全局作用域
- 函数作用域
- 块级作用域(let/const)
- 作用域链:内部函数可以访问外部函数变量
九、对象(Object)
对象是无序的键值对集合。
- 创建对象
java
let obj = {
name: '小明',
age: 18,
sayHi() {
console.log('hi')
}
}
- 访问属性
java
obj.name
obj['name']
- 遍历对象
java
for (let key in obj) {
console.log(key, obj[key])
}
- 对象方法
java
Object.keys(obj) // 获取所有键
Object.values(obj) // 获取所有值
Object.assign() // 合并对象
...obj // 对象展开
十、字符串(String)
常用方法
java
str.length // 长度
str.indexOf() // 查找
str.includes() // 是否包含
str.slice() // 截取
str.substring() // 截取
str.substr() // 截取
str.split() // 分割成数组
str.replace() // 替换
str.trim() // 去空格
str.toUpperCase() // 转大写
str.toLowerCase() // 转小写
str.startsWith() // 开头
str.endsWith() // 结尾
模板字符串(ES6)
java
let str = `名字:${name},年龄:${age}`
十一、内置对象
- Math 数学对象
java
Math.PI
Math.random() // 0-1随机数
Math.floor() // 向下取整
Math.ceil() // 向上取整
Math.round() // 四舍五入
Math.max() // 最大值
Math.min() // 最小值
Math.abs() // 绝对值
- Date 日期对象
java
let date = new Date()
date.getFullYear() // 年
date.getMonth() // 月(0-11)
date.getDate() // 日
date.getDay() // 星期
date.getHours() // 时
date.getMinutes() // 分
date.getSeconds() // 秒
十二、DOM 操作
DOM = Document Object Model(文档对象模型)
- 获取元素
java
document.getElementById('id')
document.getElementsByClassName('class')
document.getElementsByTagName('div')
document.querySelector('选择器') // 常用
document.querySelectorAll('选择器') // 常用
- 操作内容
java
elem.innerHTML // 解析标签
elem.innerText // 纯文本
elem.value // 表单值
- 操作属性
java
elem.src
elem.href
elem.title
elem.setAttribute('属性', '值')
elem.getAttribute('属性')
elem.removeAttribute('属性')
- 操作样式
java
elem.style.color = 'red'
elem.className
elem.classList.add()
elem.classList.remove()
elem.classList.toggle()
elem.classList.contains()
- 节点操作
java
parentNode
children
nextSibling
previousSibling
createElement
appendChild
removeChild
十三、事件基础
- 注册事件
java
elem.onclick = function() {}
elem.addEventListener('click', function() {})
- 常见事件
- 鼠标:click、mouseenter、mouseleave、mousemove
- 键盘:keydown、keyup、keypress
- 表单:focus、blur、change、submit
- 页面:load、scroll、resize
- 事件对象 event
java
e.target // 触发事件元素
e.preventDefault() // 阻止默认行为
e.stopPropagation() // 阻止冒泡
- 事件流
捕获阶段 → 目标阶段 → 冒泡阶段
事件冒泡:子元素事件会向上传递给父元素
十四、BOM 操作
- window 对象
全局对象,所有全局变量、函数都属于 window - 弹出框
java
alert()
confirm() // 确认框
prompt() // 输入框
- 定时器
java
setTimeout(() => {}, 毫秒) // 延迟执行
setInterval(() => {}, 毫秒) // 循环执行
clearTimeout()
clearInterval()
- location 地址栏
java
location.href // 获取/设置 URL
location.search // 参数
location.reload() // 刷新
- history 历史
java
history.back()
history.forward()
history.go(n)
- navigator 浏览器信息
java
navigator.userAgent
十五、本地存储
- localStorage
永久存储(手动清除才会消失)
只能存字符串
java
localStorage.setItem('key', 'value')
localStorage.getItem('key')
localStorage.removeItem('key')
localStorage.clear()
- sessionStorage
临时存储(关闭页面消失)
用法同上
十六、异步与同步
同步:代码按顺序执行,前面执行完才执行后面
异步:不阻塞代码,如定时器、ajax 请求、事件
JS 是单线程语言,异步任务进入任务队列。
十七、闭包
- 闭包 = 函数 + 函数能够访问的自由变量
- 作用:
延伸变量作用域
私有化变量,避免污染全局
java
function outer() {
let num = 10
function inner() {
console.log(num)
}
return inner
}
注意:滥用闭包可能造成内存泄漏。
十八、原型与原型链(极简版)
- 所有对象都有 proto
- 所有函数都有 prototype
- 对象的 proto 指向构造函数的 prototype
- 原型链:当访问一个对象属性时,先找自己,没有就沿 proto 向上找,直到 null
十九、ES6+ 常用新特性
- let / const
- 箭头函数
- 模板字符串
- 解构赋值
- 展开运算符 ...
- 数组方法:map /filter/reduce /includes
- 对象简写
- Promise
- async / await
- 模块化 import /export