Javascript 学习笔记
引入
一、简介
1、JS是什么
js是一种运行在客户端(浏览器)的编程语言
2、JS的组成
JavaScript
- ECMAscript
- Web APIs
- BOM
- DOM
二、书写位置
1、内部js
一般将js放在html页面的底部,用<script></script>
包住
2、外部js
同css外部文件一样,使用<script src=""></script>
引入,中间无需写代码,写了也不执行
3、行内js
了解即可,vue会用到这种书写模式。如:
<body>
<button onclick="alert("逗你玩")">点我月入过万</button>
</body>
三、注释和结束符
1、注释
单行注释:ctrl+/
块注释(多行注释):shift+alt+a
2、结束符
使用英文分号加在句尾表示结束
为了风格统一,要么每一句话的后面都加结束符要么都不加(按照团队要求)
四、输入输出的语法
1、文档输出内容
既可以输出文本,还可以往其内部写入标签(有相应的样式)
<script>
document.write("输出内容")
document.write("<h1>我是标题</h1>")
</script>
2、页面警告弹窗
<script>
alert("警告")
</script>
3、文档输入弹窗
<script>
prompt("请输入您的年龄")
</script>
prompt内部是所需要输入内容的提示文字
4、控制台输出(给程序员看的)
<script>
console.log("日志")
</script>
5、代码执行顺序
一般是按照书写顺序从上往下依次执行,prompt和alert会优先于其他执行(打开页面是即闪出弹窗)
五、变量的声明和赋值
1、变量的定义
变量是计算机中用于存储数据的容器,可以让计算机变得有记忆
变量并不是数据本身,简单理解就是一个装数据的盒子
2、变量的声明
<script>
let age
</script>
语法:let 变量名(标识名)
3、变量的赋值
<script>
let age %声明变量
age = 18 %变脸赋值
</script>
4、声明变量时直接赋值
<script>
let age = 18
</script>
六、变量赋值的更新
<script>
let age = 18
age = 19 %更新变量赋值,记住不要再次声明变量,会报错
%可以同时声明多个变量但是不建议这么做
let age = 18 , uname = "张三"
console.log(age,uname)
%还是建议将多个变量分开声明
let age = 18
let uname = "张三"
console.log(age,uname)
% 声明变量可以和输入输出语法结合
let name = prompt("请输入姓名")
console.log(name)
</script>
七、交换两个变量
<script>
let num1 = 10
let num2 = 20
let temp %定义一个新变量
temp = num1 %将num1的值赋给temp
num1 = num2 %将num2的值赋给num1
num2 = temp %将temp的值赋给num2
</script>
八、变量的本质
1、内存
计算机中存储数据的地方,相当于一个控件
2、变量
是程序在内存中申请一个用于存储数据的空间,变量名相当于小空间的名字
3、变量的命名规则
- 不能使用关键字(如let、var、if等)
- 只能由下划线、数字、字母、$组成,且不能使用数字开头
- 字母严格区分大小,age和Age不是同一个变量
4、变量的命名规范
- 起名要有意义
- 遵守小驼峰命名法,第一个单词首字母小写,后面的每个单词首字母都要大写。如:userName
九、数组
数组可以存储任意类型的数据
1、声明数组
<script>
let arr = ["xxx",1]
</script>
2、使用数组
数组名[索引号],索引号是从0开始的
<script>
console.log(arr[0])
</script>
3、数组的长度
<script>
console.log(arr.length)
</script>
4、一些常用的术语
元素:数组中保存的每个数据都叫做数组的元素
下标:数组中每个元素的索引号
长度:数组中元素的个数 (等于索引号加1)
十、常量
使用const定义常量,常量不允许重新赋值,且在声明时必须赋值(初始化)
小技巧:
- 不需要重新赋值的数据使用const
- 当某一变量永远不会改变时可以使用const来声明,如g、PI
<script>
const PI = 3.14
console.log(PI)
</script>
十一、基本数据类型
1、数字型number
js是弱数据类型语言,只有当我们赋值了,才知道是什么数据类型
整数、小数、负数、正数都属于数字型
2、字符型string
(1)定义及注意事项
在js中使用单引号、双引号、反引号(``)包裹的数据都叫做字符串型
在js中设置字符串型一般使用单引号
(2)在内容里加引号
- 可以添加双引号(外单内双、外双内单)
console.log('pink老师讲课非常有"激情"')
- 可以使用转义字符
\
console.log('pink老师讲课非常有\"激情\"')
(3)字符串拼接
使用“+”可以实现字符串的拼接
<script>
console.log("刘德华"+"忘情水")
</script>
<script>
let age = prompt("请输入你的年龄:")
document.write("我今年"+age)
</script>
(4)模板字符串
使用${}
表示在字符串中引入变量,需要注意的是,字符串外必须使用反引号包裹
<script>
let age = prompt("请输入你的年龄:")
document.write(`我今年${age}岁了`)
</script>
3、布尔型
true false是布尔型的字面量
4、undefined未定义类型
只声明变量但是不赋值的前提下,变量的默认值为undefined
5、null类型
如果一个变量内确认存放的是对象,但是话没准备好对象,可以先存放一个null
undefined和null的区别是:undefined表示没有赋值,null表示赋值了但是赋值为空
6、检测数据类型
使用typeof
检测数据类型
<script>
let num = 10
console.log(typeof num) %number
</script>
十二、数据的转换
1、隐式转换
-
定义:某些运算符在执行的时候,系统内部自动将数据的类型进行转换
-
规则:
- +号两端只要有一个是字符串类型,另外一个也会转换成字符串类型
- 除了+号以外的算术运算符,如:- * /等,都会将数据转换成数字类型
-
小技巧:
- 单用+号可以将字符串类型转换为数字类型
- 任何数据和字符串相加的结果都是字符串类型
<script>
console.log(1+1)//2
console.log('1'+1)//11
console.log(2-2)//0
console.log('2'-2)//0
console.log(+'123')//123且为数字类型
</script>
2、显示转换
- 定义:自己写代码告诉系统数据类型是什么
- 转换成数字型:Number、parselnt(只保留整数)、parseFloat(可保留小数)
当使用parseInt和parseFloat转换数字型时,数字只有在字符串开头才可以被识别,如果字符串开头是字母,则结果是NaN - 将字符串转换为数字型时,如果字符串内有非数字,转换失败结果为NaN即not a number,NaN也是数字型,代表非数字
- 转换成数字型的三种方法:
- 输出时转换
- 输入时转换
- 使用+号
<script>
//第一种
let str = '123'
console.log(Number(str))
//第二种
let age = Number(prompt("请输入你的年龄:"))
console.log(age)
//第三种
let age1 = +prompt("请输入你的年龄")
console.log(age1)
</script>
主要知识点
一、if语句
1、if单分支
表达式和语句的区别
表达式可被求值,所以他可以写在赋值语句的右侧
语句不一定有值,比如alert()、for、break等语句就不能被用于赋值
分支语句包含:if分支语句、三元运算符、switch语句
除了0所有数字都为真,除了‘’(空字符串)所有字符串都为真
语法
<script>
if() {
}
</script>
2、if双分支
语法
<script>
if() {
}
else() {
}
</script>
3、多分支
语法
<script>
if() {
}
else if() {
}
else if() {
}
else {
}
</script>
例题
<script>
if(score>=90) {
alert("优秀")
}
else if(score>=70) {
alert("良好")
}
else if(score>=60) {
alert("及格")
}
else {
alert("不及格")
}
</script>
二、三元运算符
语法
条件 ? 满足条件执行的代码 : 不满足条件执行的代码
例题
<script>
3<5 ? alert("真的") : alert("假的")
</script>
三、switch语句
语法
<script>
switch(数据) {
case 值1:
break
case 值2:
break
case 值3:
break
default:
代码n
break
}
</script>
找到跟小括号里数据全等(===)的case值,并执行里面对应的代码;若都不是全等,则执行default里面的代码。
switch case语句一般用于等值判断,不适合于区间判断
一般用于确定值的情况
四、while循环
语法
<script>
while(循环条件) {
要重复执行的代码(循环体)
}
</script>
三要素:变量起始值、终止条件、变量变化量
简易ATM取款机案例
<script>
let sum = 0
while(true) {
let chose = +prompt
(`请选择您的操作:
1.存款
2.取款
3.查看余额
4.退出`)//反引号可以输出相同的文本格式
if (chose===4) {
break
}
switch(chose) {
case 1:
let input = +prompt("请输入存款金额")
sum=sum+input
break
case 2:
let output = +prompt("请输入取款金额")
sum=sum-output
break
case 3:
alert(`您的余额为${sum}`)
break
}
}
</script>
五、for循环
语法
<script>
for(变量起始值;终止条件;变量变化量) {
循环体
}
</script>
遍历数组
<script>
let arr=["刘德华","刘小强","刘晓庆","刘若英"]
for(let i=0;i<=arr.length-1;i++) {
console.log(arr[i])
}
</script>
六、循环退出
break:退出整个循环。一般用于结果已经得到,后续循环不需要的时候可以使用
continue:退出本次循环。一般用于排除或者跳过某一个选项的时候
七、无限循环
1、使用while构造无限循环
while(true) {
}
2、使用for构造无限循环
for(;;) {
}
八、for循环和while循环的区别
- 明确了循环的次数使用for循环
- 不明确循环的次数使用while循环
九、循环嵌套
语法
<script>
for(外部声明记录循环次数的变量;循环条件;变化值) {
for(内部声明记录循环次数的变量;循环条件;变化值) {
循环体
}
}
</script>
99乘法表
<script>
for(let i=1;i<=9;i++){
for(let j=1;j<=i;j++){
let output = i*j
document.write(`<span>${j}×${i}=${output}</span>`)
}
document.write("<br>")
}
</script>
十、数组
1、数组的基本使用
(1)字面量声明数组
let arr=[1,2,'pink',true]
(2)使用new Array
let arr=new Array(1,2,'pink',true)
2、最大值最小值
最大值
<script>
let arr=[2,6,1,7,4]//定义一个数组
let max = arr[0]//取max为数组中的第一个元素
for(let i = 1;i<arr.length;i++) {
if(max<arr[i]){
max=arr[i]//遍历数组,如果其中一个元素大于max,则将此元素重新赋值给max
}
//三元运算符 max<arr[i]?max=arr[i]:max
}
document.write(max)
</script>
最小值
<script>
let arr=[2,6,1,7,4]//定义一个数组
let max = arr[0]//取max为数组中的第一个元素
for(let i = 1;i<arr.length;i++) {
if(max>arr[i]){
max=arr[i]//遍历数组,如果其中一个元素大于max,则将此元素重新赋值给max
}
}
document.write(max)
</script>
3、数组操作
(1)修改
数组[下标]=新增(重新赋值)
给所有数组元素后面加个“老师”
<script>
arr=['pink','red','yellow','blue']
for(let i = 1;i<arr.length;i++) {
arr[i]=arr[i]+'老师'
}
</script>
(2)新增
- arr.push(新增的内容)(重点)
将一个或多个元素添加到数组的末尾,并返回该数组的新长度 - arr.unshift(新增的内容)
将一个或多个元素添加到数组的开头,并返回该数组的新长度
(3)删除
- arr.pop()
从数组中删除最后一个元素,并返回被删除的元素的值 - arr.shift()
从数组中删除开头的元素,并返回被删除的元素的值 - arr.splice(操作的下标,删除的个数)(重点)
(4)数组筛选案例
<script>
let arr = [2,0,6,1,77,0,52,0,25,7]
let newArr = []
for(let i = 0;i<arr.length;i++) {
if(arr[i]>=10){
newArr.push(arr[i])
}
}
console.log(newArr);
</script>
十一、循环数组综合案例
十二、冒泡排序
<script>
arr=[5,4,3,2,1]
for(let i = 0;i<arr.length;i++) {
for(let j = 0;j<arr.length-i-1;j++) {
if(arr[j]>arr[j+1]) {
let temp = arr[j]
arr[j]=arr[j+1]
arr[j+1]=temp
}
}
}
</script>
arr.sort()//开发中常使用的排序方法,默认按照升序来排
升序
arr.sort(function(a,b){
return a-b
})
降序
arr.sort(function(a,b){
return b-a
})
十三、函数
1、语法
定义语法
<script>
function 函数名() {
函数体
}
</script>
调用语法
函数名()
2、参数及默认参数
<script>
function 函数名(参数列表) { //形参:在函数内部声明的变量
函数体
}
函数名(参数列表) //实参:调用函数时写在函数名右边小括号里的叫形参
</script>
需要传入几个数据就写几个,用逗号隔开
3、函数返回值
概念:当调用某个函数时,这个函数会返回一个结果出来
4、作用域
限定某个名字的可用性的代码范围就是这个名字的作用域
全局变量在任何区域都可以访问和修改
局部变量只能在当前函数内部访问和修改
<script>
let num = 10
function fn() {
let num = 20
console.log(num)//执行的是num = 20,遵循就近原则
}
fn()
</script>
5、匿名函数(没有名字的函数)
使用方式:
- 函数表达式
let fn = function() {}//定义
fn()//调用
- 立即执行函数
立即执行函数的作用:为了避免全局函数的污染
多个立即执行函数之间必须用分号隔开
//第一种写法
(function(x,y) {
console.log(x+y)
})(1,2);
//第二种写法
(function(x,y) {
console.log(x+y)
}(1,2));
十四、转换时间案例
<script>
let input = +prompt("请输入总秒数")
function getTime(t) {
let h = parseInt(t/60/60%24)
h=h>10?h:'0'+h
let m = parseInt(t/60%60)
m=m>10?m:'0'+m
let s = parseInt(t%60)
s=s>10?s:'0'+s
return`转换为${h}小时${m}分钟${s}秒`
}
let str =getTime(input)
document.write(str)
</script>
十五、逻辑中断
逻辑中断只存在于与和或中,当满足一定条件时会让右边的代码不运行
与:同真为真同假为假,左边为假,一定为假,右边则由于逻辑中断不再执行
或:存在一个为真则为真,左边为真,一定为真,右边则由于逻辑中断不再执行
十六、转换为布尔型
Boolean(需要转换的内容)
‘’、0、undefined、null、false、NaN转换为布尔值后都是false,其余则为true
十七、对象
1、什么是对象
对象是一种数据类型,是无序的数据集合(数组是有序的数据集合)
2、对象使用(属性)
声明
<script>
let 对象名 = {
属性名:属性值,
}
</script>
多个属性之间使用英文逗号分隔
<script>
let 对象名 = new Object()
</script>
3、对象的操作
(1)增
对象名.新属性名=新值
(2)删
delete 对象名.属性名
(3)改
对象.属性=值
(4)查
对象.属性
对象[‘属性名’]
4、对象使用(方法)
<script>
let 对象名 = {
方法名:函数
}
</script>
多个之间用英文逗号分隔
也可以添加形参和实参
方法的调用 对象名.方法名()
调用函数时函数内部一定要有返回值,否则就是undefined
例
<script>
let obj={
name:'刘德华',
sing:function(){
console.log('冰雨');
}
}
</script>
5、遍历对象
<script>
let obg={
uname:'pink老师',
age:'18',
gender:'男'
}
for(let k in obj){
console.log(k)//属性名 'uname','age','gender'
console.log(obj[k])//不能用obj.k --> obj.'uname',obj.'age',obj.'gender'这样是错误的,不可以加引号
}
</script>
6、内置对象
(1)内置对象是什么?
JavaScript内部提供的对象,包含各种属性和方法给开发者调用(比如:document.write())
(2)内置对象Math
是js提供的一个数学对象,Math是对象
- 包含方法有random(生成0-1随机数),ceil(向上取整),floor(向下取整),max(找最大数),min(找最小数),pow(幂运算),abs(绝对值),round(四舍五入),parseInt(取整函数)
- 包含的属性有PI(3.1415926…)
(3)生成任意范围随机数
random返回一个0-1之间的数,[0,1)
- 生成0-10的随机数,
Math.floor(Math.random()*11) - 生成5-10的随机数
Math.floor(Math.random()*6)+5 //先生成[0,6)的数,再+5 - 生成N-M的随机数
Math.floor(Math.random()*(M-N+1))+N
十八\简单数据类型和引用数据类型
简单数据类型存放在栈中,简单数据类型包括string,number,boolean,undefined,null等
引用数据类型存放在堆中,引用数据类型包括object,array,date等