JavaScript

ECMAScript核心语法

1.js的基础使用方式:

​ 行内js : js代码定义在html元素标签上
​ 内部js : 通过script标签对定义在html中
​ 外部js : 定义在外部的一个js文件中,通过script标签引入

​ 1.1建议使用位置:
​ 1.head中
​ 一幕了然,便于后期维护
​ 有可能获取不到元素
​ 2.body结束之前
​ 肯定能够获取到每一个元素
​ 不便于观察

2.常见调试方式

2.1.alert 弹出框
最先执行
不推荐做调试使用
2.2.document.write(“在文档页面中写入内容”)
当页面内容加载完毕之后,再触发document.write的执行,会覆盖原页面

​ 2.3.console控制台输出 -> 推荐使用
​ console.log()
​ console.info()
​ console.error()
​ console.warn()

3.变量&数组
3.1变量

​ 3.1.1变量的定义

​ 通过var关键字声明
​ 1)声明的同时赋值
​ var 变量名 = 赋值;
​ 2)先声明后赋值
​ var 变量名;
​ 变量名 = 赋值;
​ 3)一行中通过定义多个变量

​ 3.1.2注意

​ js中的变量的类型由值决定
​ js是一门弱类型语言,java是请强类型语言
​ js变量不赋值存在默认值 undefined

​ 3.1.3变量的作用域提升:
把当前的通过var定义的变量的声明提升到当前作用域的最上面
​ 在js中变量的定义可以省略var关键字,但是就不存在变量的作用域提升

3.2简单数据类型

​ 3.2.1Number

​ 数值型

​ 直接赋值
​ 通过运算无法得到一个正确的结果 NaN

​ 3.2.2String

​ 字符串

​ 可以通过一对’’,或者一对""定义字符串
​ 可以包含0~n个字符
​ 如果字符串中出现特殊字符,可以通过转义字符进行转义 \

​ 3.2.3Boolean

​ true、false

3.3复杂数据类型

​ 对象型 {}
​ 键值对的集合
​ key : value
​ 每个键值对之间使用,分隔
​ 键与值之间使用:分隔
​ value可以为任意类型的值

4.typeof 判断数据类型

​ typeof 数据
​ typeof(数据)
​ 返回数据类型的小写字符串表现形式

5.类型转换
隐式类型转换 | 自动

​ 在进行一些其他操作运算的时候,目的不是为了发生类型转换,而在运算过程中会默认自动发生类型转换,这种类型转换成为隐式类型转换
​ 一般为四则运算 + - * / …

显示类型转换 | 强制

​ 任意类型都可以转换为一下三种类型 : String Number Boolean
​ Number(数据)
​ String(数据)
​ Boolean(数据)

Number(数据)
        String
            '' 空串                   -> 0
            ' ' 空格字符串             -> 0
            '123' 纯数字字符串         数字
            '123abc' 非纯数字字符串     NaN

        Boolean
            false       ->0
            true        ->1

        Null                -> 0
        Undefined           -> NaN
Boolean()
        String
            ''         false
            ' '        true
            其他字符串  true

        Number
             0,NaN      ->false
            非0数字      ->true

        Null            ->false
        Undefined       ->false

6.运算符

6.1赋值运算符

  ==  是否相等  数据
  === 是否相等  数据+类型
  先比较类型后比较数据值

6.2逻辑运算符

逻辑运算符
// &&运算如果第一个值为true则输出第二个值,第一个值为false则输出false
// 如果第一个值为true输出true,第一个值为false则输出第二个值
7.数组

7.1数组 : 存储多个数据
可变长,长度根据跟随数据的增删动态的改动
索引,可以根据索引操作数组中的数据
数组的索引可以跟随数据的改动进行动态修改
如果数组存在,索引位置存在,但是没有赋值,默认undefined
js中的数组中可以存放任意类型的数据

7.2数组常用方法:
slice 截取(切片)数组,原数组不发生变化
1个参数 起始索引,默认截取到最后
2个参数 起始索引 结束索引 结束索引位置不包含
splice 剪接数组,原数组变化,可以实现前后删除效果
1个参数 起始索引 实现删除与截取的效果
2个参数 起始索引 删除|截取个数 实现删除与截取的效果
3个往上 起始索引 个数 从第三个参数开始后面所有的参数为要替换的新数据 替换,截取

8.函数

​ 定义功能的实现
​ 函数声明 :
​ function 函数名(参数列表){
​ 函数体;
​ return 返回值;
​ }

​ 函数的调用:
​ 1)函数名(实参) -> 执行函数中的代码
​ 2)把函数声明转为函数表达式进行自调用
​ 转换方式: 在函数声明的开始位置添加!,~,+,-

​ 函数表达式
​ var 变量名 = function 函数名(形参){

​ };

​ 函数的调用:
​ 1)变量名(实参);
​ 2)在函数的最后直接添加()进行自调用

注意:
1.在js中所有的函数都存在返回值,没定义返回值默认undefined
2.形参与实参可以不一一对应,如果没有对应的实参,形参的默认值undefined
3.函数表达式中的函数名一般省略不写,不可用来调用函数,只有在发生递归的时候有用

作用域 : 函数

​ 函数的作用域提升 : 把函数声明方式定义的函数提升到当前作用域的最上面
​ 变量的作用域提升 : 把通过var定义的变量的变量的声明,提升到当前作用域的最上面

​ 注意:
​ js中的函数可以任意嵌套块: {} 具有语义化的特点

9.JSON

对象 Object
{}
键值对的集合
键 : 值
键值对之间通过 ,进行分隔
所有的键默认都是字符串 “”
如果key符合标识符的命名规范.可以省略""
value可以为js中任意类型

​ 操作对象的属性:
​ 根据key获取value
​ 1)对象名.属性名
​ 2)对象名[“属性名”]
​ js中对象的创建方式:
​ 1.字面量的创建方式 {}
​ 2.new Object() 空对象
​ JSON : JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
​ 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
​ JSON 与 JS 对象的关系
​ JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

常见的json数据:
‘{“name”: “John Doe”, “age”: 18, “address”: {“country” : “china”, “zip-code”: “10000”}}’
key都是通过""定义的字符串
value : 数值型,字符串,对象{},数组[],boolean,null
js对象与json串之间的转化问题
序列化 : 将对象转为可存储或者可传输的数据的形态的过程

BOM对象

window对象方法

​ 浏览器通过(实际是window对象的方法)alert()、confirm()、prompt()方法可以调用系统对话框向用户显示消息

​ (1)消息框:alert, 常用。

​ alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框。
(2)输入框:prompt,返回提示框中的值。
​ prompt() 方法用于显示可提示用户进行输入的对话框。
​ 参数(可选):
​ 第一个参数:要在对话框中显示的纯文本。
​ 第二个参数:默认的输入文本。
​ (3)确认框:confirm,返回 true/false.
​ confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。

打开窗口

​ window.open()方法既可以导航到一个特定的URL也可以用来打开一个新的窗口

关闭窗口

​ window.close():关闭窗口。

时间函数
setTimeout() :

​ 在指定的毫秒数后调用函数或计算表达式。返回一个唯一的标识;也可以通过返回的标识cliearTimeout(id): 来清除指定函数的执行。

// 延迟3 秒后出现 alert
function hello() {
 alert("对不起, 要你久候");
}
setTimeout("hello()", 3000);
 
  // 时间显示器
var timeout;
  function init(){
 // 拿到当前时间
 var date = new Date();
 var time = date.toLocaleString();
 // 拿到相应对象
 var h1 = document.getElementById('h1');
 // 根据需求添加样式
 if(0==date.getSeconds()){ // 当时间的秒数变成0时,显示红色字体
 h1.innerHTML = '<span style="color:red">' + time + '</span>';
 } else {
 h1.innerHTML = time;
 }
 /*
 * 定时操作,只执行一次
 第一个参数:执行的方法;第二个参数:定时,单位是毫秒
 * */
  setTimeout(init,1000);  // 等多少时间来执行
}
// window.setTimeout(init,1000);// 只执行一次
// 停止操作
function stopShow () {
    clearTimeout(timeout);
 }
</script>
<body onload="init();">
<h1 id="h1"></h1>
  <button onclick="stopShow()">时间停止</button>
</body>

​ 在times毫秒后执行function指定的方法,执行之前也可以取消

setInterval():

​ 可按照指定的周期(以毫秒计)来调用函数或计算表达式,也可根据返回的标识用来结束。该方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭

var id = setInterval(function,times);
clearInterval(id);
function test(){
	console.log(".....");
}
// window是一个全局对象,通过全局对象调用setInterval()函数
window.setInterval(test,1000);

DOM对象

Document Object Model 文档对象模型

​ 要实现页面的动态交互效果,bom 操作远远不够,需要操作 html 才是核心。如何操作 htm,就是
DOM。简单的说,dom 提供了用程序动态控制 html 接口。DOM即文档对象模型描绘了一个层次化的
节点树,运行开发人员添加、移除和修改页面的某一部分。dom 处于javascript 的核心地位上。
每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象使我们可以从脚本中对
HTML 页面中的所有元素进行访问。Document 对象是 Window 对象的一部分,可通过
window.document 属性对其进行访问。

节点

​ 加载 HTML 页面时,Web 浏览器生成一个树型结构,用来表示页面内部结构。DOM 将这种树型结构

理解为由节点组成,组成一个节点树。对于页面中的元素,可以解析成以下几种类型的节点:

​ html --> 文档节点
​ div --> 元素节点
​ title --> 属性节点
​ 测试 Div --> 文本节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quo6CXzj-1630159620730)(JavaScript.assets/image-20210828204845914.png)]

操作元素的节点

​ 当HTML文档在被解析为一颗DOM树以后,里面的每一个节点都可以看做是一个一个的对象,我们称为DOM对象,对于这些对象,我们可以进行各式各样的操作,查找到某一个或者一类节点对象,可以创建某种节点对象,可以在某个位置添加节点对象,甚至可以动态地删除节点对象,这些操作可以使我们的页面看起来有动态的效果,后期结合事件使用,就能让我们的页面在特定时机、特定的事件下执行特定的变换。

获取节点

​ 在进行增、删、改的操作时,都需要指定到一个位置,或者找到一个目标,此时我们就可以通过Document对象提供的方法,查找、定位某个对象(也就是我们说的节点)。
​ 注意:操作 dom 必须等节点初始化完毕后,才能执行。
​ 处理方式两种:
​ (1)把 script 调用标签移到html末尾即可;
​ (2)使用onload事件来处理JS,等待html 加载完毕再加载 onload 事件里的 JS。

方法描述
getElementById()根据id获取dom对象,如果id重复,那么以第一个为准
getElementsByTagName()根据标签名获取dom对象数组
getElementsByClassName()根据样式名获取dom对象数组
getElementsByName()根据name属性值获取dom对象数组,常用于多选获取值
创建节点和插入节点

​ 很多时候我们想要在某个位置插入一个新的节点,此时我们首先需要有一个节点存在,可以通过以下几种方式创建新节点。

创建节点
方法描述
createElement()创建一个新的节点,需要传入节点的标签名称,返回创建的元素对象
createTextNode()创建一个文本节点,可以传入文本内容
innerHTML也能达到创建节点的效果,直接添加到指定位置了
插入节点
方法描述
write()将任意的字符串插入到文档中
appendChild()向元素中添加新的子节点,作为最后一个子节点
insertBefore()向指定的已有的节点之前插入新的节点newItem:要插入的节点exsitingItem:
参考节点 需要参考父节点
间接查找节点
方法|属性描述
childNodes返回元素的一个子节点的数组
firstChild返回元素的第一个子节点
lastChild返回元素的最后一个子节点
nextSibling返回元素的下一个兄弟节点
parentNode返回元素的父节点
previousSibling返回元素的上一个兄弟节点
删除节点

​ removeChild(): 从元素中移除子节点

表单

​ 表单是我们页面向后台传输数据的一种非常常见的方式,在进行数据发送(请求发出)之前,我们应
该现在页面进行一系列数据合法性的验证,节省不必要的错误数据的传输,以及提高用户的体验度。

获取表单元素

​ 1. 获取input元素

​ 如 text password hidden textarea等,前两种常用。

1)、通过 id 获取:document.getElementById(元素 id);
2)、通过 form.名称形式获取: myform.元素名称;   name属性值
3)、通过 name 获取 :document.getElementsByName(name属性值)[索引] // 从0开始
4)、通过 tagName 数组 :document.getElementsByTagName('input')[索引] // 从0开始
获取单选按钮

​ 前提:将一组单选按钮设置相同的name属性值

​ (1)获取单选按钮组:

​ document.getElementsByName(“name属性值”);

​ (2)遍历每个单选按钮,并查看单选按钮元素的checked属性

​ 若属性值为true表示被选中,否则未被选中

​ 选中状态设定: checked=‘checked’ 或 checked=‘true’ 或 checked
​ 未选中状态设定: 没有checked属性 或 checked=‘false’

获取多选按钮

​ 操作方式与单选同理,不同之处在于可以多选

var ufav = document.getElementsByName("ufav");
var favstr = "";
  for (i = 0;i < ufav.length; i++){
    if(ufav[i].checked){
      favstr += ufav[i].value+",";
   }
 }
favstr = favstr.substr(0,favstr.length-1);
获取下拉选项

(1)获取 select 对象:

​ var ufrom = document.getElementById(“ufrom”);

(2)获取选中项的索引:

​ var idx = ufrom.selectedIndex;

(3)获取选中项 options 的 value属性值:

​ var val = ufrom.options[idx].value;

​ 注意:当通过options获取选中项的value属性值时,
​ 若没有value属性,则取option标签的内容
​ 若存在value属性,则取value属性的值

(4)获取选中项 options 的 text:

​ var txt = ufrom.options[idx].text;

​ 选中状态设定:selected=‘selected’、selected=true、selected
​ 未选中状态设定:不设selected属性

提交表单

表单提交方式
(1) buttom按钮 + submit() buttom按钮绑定一个点击事件,触发函数校验表单元素的数据是否满足要求,满足调用submit()提交表单
(2) submit提交按钮 + 点击事件 onclock = “return func_submit()”->通过函数的返回值,实现提交请求的拦截 返回true->提交 返回false->拦截
(3) 表单的onsubmit事件+ “return func_submit()” ->通过函数的返回值,实现提交请求的拦截 返回true->提交 返回false->拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值