JavaScript基础+DOM(上)

JavaScript的介绍

书写位置与注释

内部:

  • 直接写在html里面,用script标签包住

  • Script需要写在body标签的里面。

  • 页面弹出对话框:alert(‘内容’)

外部:

  • 在所需的html里写上<script src=”地址”></script>,也是写在html的body标签里面。

  • 注意在这个标签里面不要写内容。(类似CSS外部标签的引用 <link rel="stylesheet" href="style.css">

行内:

在标签内部直接写js——<button onclick=”alter(‘内容’)”></button>

js的注释:与c和java的注释一样

js的结束符为分号;(可以省略)

js的输入与输出

输出:

document.write(内容)

  • 作用:像body内输出内容

  • 注意:如果在内容里写标签,会解析成网页的元素

alert(内容)

  • 页面弹出警告的对话框

console.log(内容)

  • 控制台输出(程序员)

输入:

prompt(内容)

变量

定义:存储数据的容器

变量是声明:let 变量名(标识符)

  • 声明变量优先const(特别是数组和对象)

  • 当基本数据类型的值或者引用类型的地址改变时,用let命名

变量的赋值:变量名=字面量(数据)

  • 赋值号左右要有空格

  • 声明和赋值可以一起(与C一样)

更新变量:重新赋值(与C一样)

声明多个变量,逗号隔开(与C一样)

输入存入变量:let 变量名 = prompt(内容)

变量命名规则(与C一致)

  • 不能用关键字

  • 数字,字母,下划线,$组成,数字不能放开头

  • 严格规范大小写

  • 起名时候第一个单词开头小写,后面每个单词大写(可以不遵循)

常量

声明:const 常量名=赋值数据

注意:常量不允许重新赋值,且声明式必须赋值

数据类型

基本数据类型:

  • number 数字型

    • 算数运算符+||-||*||/||%

    • 其中%和*||/的优先级相同

    • NaN代表计算错误,任何对NaN的操作都是返回Nan

  • string 字符串型

    • 引号成对使用`` || '' || ""

    • 字符串拼接:+(数字相加,字符相连)只要其中一个对象是字符串+就是拼接的意思。

    • 模版字符串:输出的内容 ——外面用反引号;`` 里面${变量名}。

  • boolean 布尔型

  • undefined 未定义型(不确定时候推荐用const,然后后面改)

    • =undefined,只声明不赋值

  • null 空类型

    • =null,赋值了,但是值为空

    • 可能是存放对象,和object一起用

引用数据类型

  • object 对象

检测数据类型

写法:typeof 变量名||typeof (变量名)

类型转换

前提:使用表单、prompt获取的数据都默认是字符串类型的

隐式转换

  • +两边只要有一个是字符串,都会把另外一个转换成字符串

  • 除了+以外的计算运算符,-||*||/||%等都会把数据转换成数字

  • +作为正号解析(只有+和一个字符串)可以转换成数字型

显式转换

  • Number(数据)

    • 转成数字类型,Number(变量名||函数)

    • 如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number),即不是一个数字。

    • NaN也是number类型的数据,代表非数字

  • parseInt(数据)

    • 只保留整数

    • 只能提取前面的数字,如果开头为非数字就输出Nan

  • parseFloat(数据)

    • 可以保留小数

    • 只能提取前面的数字,如果开头为非数字就输出Nan

运算符

  • 赋值运算符 +=、-=、*=、/= 、%=

  • 一元运算符++在前 i先加;++在后 i 后加(s=0,i=0)

    • s=i++ +2->i=0,s=2

    • s=++i + 2->i=2,s=2

  • 比较运算符

    • ==: 左右两边值是否相等

    • ===: 左右两边是否类型和值都相等

    • !==: 左右两边是否不全等(不等于)

    • 字符串比较,是比较的字符对应的ASCII码

      • 从左往右依次比较

      • 如果第一位一样再比较第二位,以此类推

    • NaN不等于任何值,包括它本身涉及到"NaN“ 都是false

  • 逻辑运算符&&、||、!

  • 运算优先级

    • ()>一元运算符(++、--、!)>算术运算符>关系运算符(><>=)>相等运算符(==、===、!==、!=)>逻辑运算符(先&&,后||)>赋值运算符>逗号运算符

表达式和语句

表达式:因为表达式可被求值,所以它可以写在赋值语句的右侧。

语句:而语句不一定有值,所以比如 alert() for和break 等语句就不能被用于赋值

程序三大流程控制语句

分支语句

  • 单分支if{}

  • 双分支if{} else{}

  • 多分支if {} else if{} else{}

  • 三元运算符

    • 条件 ? 满足条件执行的代码 :不满足条件执行的代码

  • switch语句

switch(数据){

case 值1:

代码1

case 值2:

代码2

default:

代码

}

断点调试

  1. 按F12打开开发者工具

2.点到sources一栏

3.选择代码文件

循环

while||for||循环嵌套

循环退出

continue退出本次循环,一般用于排除或者跳过某一个选项的时候,可以使用continue

break退出整个循环,一般用于结果已经得到,后续的循环不需要的时候可以使用

数组

声明数组

  • 声明数组:

    • let 数组名=[赋值的数据,逗号隔开]

    • let 数组名=new Array(值)

    • let 数组名=[内容为空] 数组名[0.....]=值

  • 输出数组:输出语句(数组名[索引号])

  • 当中文作为赋值数据的时候要用引号括起来,''||""

  • 输出数组的长度:输出语句(数组名.length)

操作数组(增 删 改 查)

增:数组添加新的数据

  • arr.push(新增的内容)

    • 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度

  • arr.unshift(新增的内容)

    • 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度

删除:

  • 数组名. pop() 方法从数组中删除最后一个元素,并返回该元素的值。无参。

  • 数组名. shift() 方法从数组中删除第一个元素,并返回该元素的值。无参。

  • 数组名. splice(start,deleteCount) 方法 删除指定元素

    • start:指定修改的开始位置(从0计数)可换

    • deleteCount:

      • 表示要移除的数组元素的个数

      • 可选的。 如果省略则默认从指定的起始位置删除到最后

案例:根据数据生成柱形图

  • html:大盒子包含4个柱形盒子

  • CSS:

    • justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。(justify-content: space-around;  /* 均匀排列每个元素,每个元素周围分配相同的空间 */

    • align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。(align-items:flex-end 元素位于容器的结尾。弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。

    • justify-content: space-between;  /* 均匀排列每个元素首个元素放置于起点,末尾元素放置于终点 */

    • flex-direction 属性规定灵活项目的方向。

      注意:如果元素不是弹性盒对象的元素,则 flex-direction 属性不起作用。flex-direction:column灵活的项目将垂直显示,正如一个列一样。

  • js:把html放在script里数组,循环改一下高度

数组排序

  • 冒泡排序(外for:length-1;里for:length-i-1)

  • 函数(数组名.sort(function(a,b){re})

    • 数组名.sort()

    • 升序——数组名.sort(function(a,b){return a-b})

    • 降序——数组名.sort(function(a,b){return b-a})

函数

函数名命名

  • 命名建议:function 函数名(形参){}

    • 常用动词约定

      • can 判断是否可执行某个动作

      • has 判断是否含义某个值

      • is 判断是否为某个值

      • get 获取某个值

      • set 设置某个值

      • load 加载某个值

  • 函数的调用语法:函数名(实参)

    • 封装一个数组函数 function 函数名(数组名[])

  • 函数传参

    • 多个数据用逗号隔开

    • 参数默认值(可以默认为 0,这个默认值只会在缺少实参参数传递时 才会被执行,所以有参数会优先执行传递过来的实参, 否则默认为undefined)

  • 函数返回值

    • return 数据

    • return [数值1,数值2]

  • 两个相同的函数后面的会覆盖前面的函数

  • 在Javascript中 实参的个数和形参的个数可以不一致

    • 如果形参过多 会自动填上undefined

    • 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)

  • 函数一旦碰到return就不会在往下执行了 函数的结束用return,需多个return值是用return数组:return [数值1,数值2]

输出用盒子装(在script)

const div =document.querySelector('div')

div.innerHTML =max(变量名)

作用域

全局变量:函数外部let 的变量(全局变量在任何区域都可以访问和修改

局部变量:函数内部let的变量(局部变量只能在当前函数内部访问和修改

局部变量或者块级变量 没有let 声明直接赋值的当全局变量看(不建议)

函数内部的形参可以当做局部变量看

访问原则:在能够访问到的情况下 先局部, 局部没有在找全局(采取就近原则的方式来查找变量最终的值

匿名函数

  • 函数表达式

    • 将匿名函数赋值给一个变量,并且通过变量名称进行调用 我们将这个称为函数表达式

    • 语法:let 变量名=function()

    • 调用:变量名()

    • 区别:函数表达式必须先声明,在使用;具体函数的调用可以写到任何位置

  • 立即执行函数

    • 避免全局变量之间的污染

    • (function(形参){})(实参)

    • (function(形参){}(实参))

逻辑中断

  • 运算符短路

    • console.log(假 && 2)、console.log(真 || 假)->后一个不执行,返回假值

    • console.log(真 && 真)返回最后一个真值

    • console.log(真 || 真)返回第一个真值

  • 转换为Boolean型

    • 显示转换:‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true

    • 隐式转换:

      1. 有字符串的加法 “” + 1 ,结果是 “1”

      2. 减法 - (像大多数数学运算一样)只能用于数字,它会使空字符串 "" 转换为 0

      3. null 经过数字转换之后会变为 0

      4. undefined 经过数字转换之后会变为 NaN

5. NaN经过数字转换之后会变为 NaN

断点调试:进入函数内促看执行过程 F11

对象

对象声明语法:let 对象名 = {} || let 对象名 =new Object()

属性

  • 属性都是成 对出现的,包括属性名和值,它们之间使用英文 : 分隔

    多个属性之间使用英文 , 分隔

    属性就是依附在对象上的变量(外面是变量,对象内是属性)

    属性名可以使用 "" 或 '',一般情况下省略,除非名称遇到特殊符号如空格、中横线等

  • 对象内容为空:let obj=null

  • 操作对象

    • 属性-查:

      • 对象名.属性名

      • 如果属性名带字符:对象名.['属性名']

        • 对象[‘属性’] 方式, 单引号和双引号都阔以

          也可以用于其他正常属性,比如:

          []语法里面的值如果不添加引号 默认会当成变量解析

    • 属性-改||属性-增

      • 对象名.新属性 = 新值

    • 属性-删 (少用)

      • delete 对象名.属性

方法

  • 声明——方法(形参)

    • 方法是由方法名和函数两部分构成,它们之间使用 : 分隔;多个属性之间使用英文 , 分隔

    • 方法名可以使用 "" 或 '',一般情况下省略,除非名称遇到特殊符号如空格、中横线等

  • 调用方法—— 对象.方法(实参)

  • 动态新增方法——对象名.方法名=function(){}

遍历对象

for(let k in 对象名){

//调用对象属性

console.log(对象名.属性名)

console.log(对象名[k])——全部属性,k为字符串类型的下标||索引号

k 是获得对象的属性名对象名[k] 是获得 属性值

}

遍历数组对象

把对象设置为数组中的一个值

可以直接用for循环,调用数组名[i].属性名

内置对象

Math

  • random:生成0-1之间的随机数(包含0不包括1)

    • 生成N-M之间的随机数

      • Math.floor(Math.random() * (M - N + 1)) + N

      • let random = Math.floor(Math.random() *arr.length)

  • ceil:向上取整——ceil(数字)

  • floor:向下取整——floor(数字)

    • 与parseInt的区别是floor(不能出现非数字)

  • round:四舍五入——round(数字)

  • max:找最大数

  • min:找最小数

  • pow:幂运算——pow(x,y) =x的y平方

  • abs:绝对值

  • sqrt:平方根

基本数据类型和引用数据类型

  • 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型

    string ,number,boolean,undefined,null

  • 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型

    通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array(数组)、Date等

DOM

  • 文档对象模型

  • 操作网页内容功能(特效||用户交互)

  • DOM树

    • 体现标签与标签之间的关系

    • 通过树状结构表现出HTML文档的关系

  • DOM对象:根据HTML文档,浏览器生成的js对象(修改 js对象会自动映射到标签上去)

  • 核心思想:把网页内容当做对象来处理

  • document对象

    • 是DOM提供的一个对象

    • 属性和方法都是用来访问和操作网页内容的

    • 网页里的内容都在document里面

获取DOM元素(根据CSS选择器)

  • 选择第一个元素:const 变量名=document.querySelector(‘CSS选择器*n’)->括号里是字符串,必须加引号

    • 返回值:CSS选择器匹配的第一个元素(对象)

    • 获取对象后直接修改 变量名 .style.CSS操作函数=‘新值’

  • 选择多个元素:const 变量名=document.querySelectorAll(‘CSS选择器*n’)

    • CSS选择器匹配的对象集合(类似于数组)->伪数组

    • 伪数组:有长度,有索引号的数组。但是没有数组方法

    • 不能直接修改,可以通过循环遍历(下标) 一次修改里面元素

修改DOM元素

属性

  • innerText属性

    • 先获取->变量名.innerTest='...'

    • 将文本内容添加/更新到任意标签位置

    • 显示纯文本,不解析标签

  • innerHTML属性

    • 先获取->变量名.innerHTML='标签内写内容'

    • 将文本内容添加/更新到任意标签位置

    • 解析标签

  • style属性

    • 先获取对象->变量名.style.CSS操作函数(属性)=‘新值’

      • 如果属性有-连接,需要转换成小驼峰命名法:margin-top==marginTop

      • 赋值记得带单位

操纵类名

  • className='CSS类名 (+另一个CSS类名)'

    • 使用新值换旧值,如果需要添加一个类名,需要保留之前的类名

  • classList(追加和删除功能不影响以前类名)

    • 追加一个类:先获取对象->变量名.classList.add(‘类名’)->类名不加点,并且是字符串

    • 删除一个类:先获取对象->变量名.classList.remove(‘类名’)->~

    • 切换一个类:先获取对象->变量名.classList.toggle(‘类名’)->~

      • 有这个类名就删掉,没有这个类名就添加

  • 表单元素属性

    • 设置:先获取对象->变量名.属性名=新值

      • 表单.value ='用户名'

      • 表单.type='CSS属性值'

      • button比较特殊,需要innerHTML改表单的属性->选择器.innerHTML=‘新值’

  • 自定义属性

    • 标签一律以data-开头的类名:data-自定义属性

    • 在DOM对象上一律以dataset对象方式获取

      • 先获取对象->变量名.dataset.自定义属性

定时器-间歇函数

开启定时器

setInterval(函数,间歇时间)->单位是ms,返回的是一个id数字

  • 立即执行函数:setInterval(function 函数名(){},1000)

  • 定义函数后调用:setInterval(函数名,间隔时间的数字) 调用的函数不要加小括号

关闭定时器

clearInterval(let定义的变量名)

  • let变量名=setInterval(函数,间隔时间) clearInterval(变量名)

  • 函数名不要加括号

禁用按钮:在HTML标签写上disabled属性

关闭禁用:类名.disabled=false

事件监听

语法:元素对象.addEventListener(‘数据类型’,要执行的函数(){})


JavaScript基础+DOM(上)
http://localhost:8090//archives/javascriptji-chu
作者
文伊仪
发布于
2024年10月18日
许可协议