分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

js大致复习第一遍

发布时间:2023-09-22 06:26责任编辑:顾先生关键词:js

$JavaScript初级-----基础知识

什么是JS(布莱登 艾奇)
  • 是一门脚本语言:不需要编译,直接运行
  • 是一门解释性的语言:遇到一样代码就解释一行代码
  • 是一门动态类型的语言---不解析
  • 是一门基于对象的语言---不解释
  • 是一门弱类型的语言,声明变量的时候都使用var
三个部分
  • ECMAScript标准: js的基本的语法
    * DOM: 文档对象模型(document object model)
    * BOM: 浏览器对象模型 (browser object model)
    • DOM的作用:操作页面的元素
    • DOM树:把html页面或者是xml文件看成是一个文档,文档就是一个对象,这个文档中所有的标签都是元素,元素也可以看成是对象,标签(元素,对象)有很多,还有嵌套的关系,组成的这种层次结构,可以模拟成树形结构图,简称:树状图 ,就是DOM树

      数据类型
  • number数据类型----无论是整数还是小数都是number数据类型的
    * string数据类型----字符串,获取字符串的长度:变量名.length
    * boolean数据类型---两个值,true,false
    * null----只有一个,null
    * undefined----只有一个,undefined,一个变量声明了,没有赋值
    * object---对象-----面向对象的时候讲解

基本类型(简单类型,值类型):number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null

基本类型的值在栈上复杂类型的对象在堆上,地址(引用)在栈上
值类型之间传递的是值引用类型之间传递的是引用(地址)
类型转换

其他类型转数字
parseInt()---->转整数
parseFloat()--->转小数
Number()---->转数字-----要比上面两个严格
其他类型转字符串
toString()
String()
其他类型转布尔类型
Boolean()---->要么是true要么是false

运算符
  • 算术运算符: + - * / %
    * 复合运算符: += -= *= /= %=
    * 赋值运算符: = 优先级别是最低的
    * 一元运算符: ++ ?-- ++在前,先自增再运算;++在后,先运算再自增
    * 三元运算符: ? :
    * 关系运算符:> < >= <= == === != !== (结果是布尔类型)
    * 逻辑运算符: && || ! 与或非 (结果是布尔类型)
流程控制

流程控制: 代码的执行过程
顺序结构:代码的执行的顺序,从上到下,从左到右(不严谨)
分支结构: if,if-else ,if-esle if,switch-case ,三元表达式
循环结构:while 循环,do-while,for循环 ?for-in循环
总结分支:如果只有一个分支,就用if
如果有两个分支,就用if-else
如果多个分支,一般是范围的,推荐使用if-else if
如果多个分支,一般是具体的值,推荐使用switch-case
总结循环:
while:先判断后循环,有可能一次循环都不执行
do-while:至少执行一次循环体,再判断
for循环:知道了循环的次数,推荐使用for循环

数组
  • break:在循环中遇到这个关键字,直接跳出当前所在的循环
    • continue:在循环中遇到这个关键字,直接进行下一次循环
    • 数组:存储一组有序的数据,数据类型可以不一样
    • 数组的作用:一次性存储多个数据
    • 数组元素:数组中存储的每个数据,叫数组元素,存储了5个数据,有5个数组元素
    • 数组的长度:数组的元素的个数,叫数组的长度:数组名.length--->就是长度,数组的长度是可以改变的
    • 索引(下标):存储数组元素的编号,从0开始,到数组的长度-1结束
    • 索引是用来存储和读取数组元素的
    • 遍历数组:通过循环的方式找到数组中的每个数据
    • 冒泡排序:
    <script> ?//冒泡排序:把所有的数据按照一定的顺序进行排列(从小到大,从大到下) ?var arr = [10, 0, 100, 20, 60, 30]; ?//循环控制比较的轮数 ?for (var i = 0; i < arr.length - 1; i++) { ???//控制每一轮的比较的次数 ???for (var j = 0; j < arr.length - 1 - i; j++) { ?????if (arr[j] < arr[j + 1]) { ???????var temp = arr[j]; ???????arr[j] = arr[j + 1]; ???????arr[j + 1] = temp; ?????} ???} ?} ?console.log(arr);</script>

数组定义的方式:
通过构造函数定义数组
var 数组名=new Array();空数组 Array()就是构造函数
var 数组名=new Array(长度);是设置数组的初始的长度,长度是可以改变的
var 数组名=new Array(值,值,值...);定义数组并设置数组中的元素值
字面量的方式定义数组
var 数组名=[];空数组
var 数组名=[10];这个数组有一个元素,值是10,长度是1
数组变量for(var i=0;i<数组名.length;i++){ }

函数

函数定义:

 ????function 函数名(){ ?????????函数体 ????}

函数调用:

 ????函数名();
参数

形参:函数定义的时候函数名字后面的小括号里的变量就是参数,是不需要写var
实参:函数调用的时候小括号里传入的变量或者是值,都是实参
* 返回值:函数中如果有return,那么这个函数就有返回值
* 如果函数中没有return,那么这个函数没有返回值
* 如果函数中有return,但是后面什么内容都没有,这个函数没有明确返回值
* 如果一个函数没有明确的返回值,函数调用了,并且接收了,那么此时接收的结果undefined
* 如果直接输出函数名字,那么是这个函数的代码

 ????无参数无返回值的函数 ?????function f1(){ ???????} ????有参数无返回值的函数,2个参数 ?????function f2(x,y){ ???????????} ?????无参数有返回值的函数 ????function f3(){ ?????????return 100; ????} ????有参数有返回值的函数 ?????function f4(x){ ????????return "您好"; ???}

arguments

  • arguments----->可以获取函数调用的时候,传入的实参的个数
  • arguments是一个对象,是一个伪数组
  • arguments.length--->是实参的个数
  • arguments[索引]---->实参的值
作用域,变量,预解析

作用域:变量的使用范围

  • 全局作用域:全局变量在任何位置都可以使用的范围
  • 局部作用域:局部变量只能在某个地方使用---函数内
  • 作用域链:在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用,找不到则继续向外面找这个变量,找到则使用,一直找到全局作用域,找不到则是undefined

变量:

  • 全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
  • 局部变量:在函数中定义的变量

预解析:在执行代码之前做的事情

  • 变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的最上面
  • 函数中的变量声明,会提升到该函数的作用域的最上面(里面)
  • 如果有多对的script标签都有相同名字的函数,预解析的时候是分段的,互不影响
编程思想:面向对象,过程
  • 面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程
  • 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果
    面向对象的特性:封装,继承,多态,(抽象性)
对象

对象:有属性和方法,具体特指的某个事物
变量 instanceof 对象------->布尔类型,判断这个变量是不是这个类型的
属性----特征
方法----行为
对象分三种:内置对象,自定义对象,浏览器对象
* 内置对象:系统提供的
* 自定义对象:自己写的
* 浏览器对象:浏览器的

创建对象

创建的对象的3种方式:

  • 通过调用系统的构造函数创建对象 new Object()
    var obj1=new Object();
  • 自定义构造函数创建对象
    var obj2=new 自定义构造函数();
  • 字面量的方式创建对象
    var obj3={};
JSON

JSON格式的数据,都是键值对,成对的数据

var json={ ???"name":"小明", ???"age":18, ???"sex":"boy" ????};
设置,获取属性值

对象设置属性的值的写法

  • 对象.属性名字=值;----点语法
  • 对象["属性的名字"]=值;-----

对象获取属性的值的写法

  • 对象.属性
  • 对象["属性"]
遍历对象
var obj={ ?????"name":"林子闲", ?????"age":20, ?????"sex":"男", ?????"wife":"乔韵" ???}; for(var key in obj){ ??//key---是一个变量,这个变量中存储的是遍历的对象的属性的名字 ????console.log(key+"========"+obj[key]); }
Math方法
  • Math.ceil()---向上取整
  • Math.floor()---向下取整
  • Math.Pi----圆周率的值
  • Math.Max()---一组数字中的最大值
  • Math.Min()---一组数字中的最小值
  • Math.abs()----绝对值
  • Math.random()---随机数字
  • Math.sqrt()----开平方
  • Math.pow()----一个数字的多少次幂
new的执行过程

new的时候,系统做了什么事?

  1. 开辟空间,存储创建的新的对象
  2. 把this设置为当前的对象
  3. 设置属性和方法的值
  4. 返回当前的新的对象

三大系列

offset系列:

  • (父级元素margin+父级元素padding+父级元素border+自己的margin)
  • offsetLeft:元素距离左边位置的值
  • offsetTop:元素距离上面位置的值
  • offsetWidth:获取元素的宽度(有边框)
  • offsetHeight:获取元素的高度(有边框)

scroll系列:卷曲

  • scrollLeft:元素向左卷曲出去的距离
  • scrollTop:元素向上卷曲出去的距离
  • scrollWidth:元素中内容的实际的宽度,如果没有内容,或者内容很少,元素的宽度
  • scrollHeight:元素中内容的实际的高度,如果没有内容,或者内容很少,元素的高度

client系列:

  • clientWidth:可视区域的宽度,没有边框
  • clientHeight:可视区域的高度,没有边框
  • clientLeft:左边框的宽度
  • clientTop:上边框的宽度
  • clientX:可视区域的横坐标
  • clientY:可视区域的纵坐标

&JavaScript中级-----Webapi

获取元素
- 根据id从整个的文档中获取元素---返回的是一个元素对象document.getElementById("id属性的值")- 根据标签的名字获取元素-----返回的是元素对象组成的伪数组document.getElementsByTagName("标签的名字");- 根据name属性的值获取元素document.getElementsByName("name属性的值");- 根据类样式的名字获取元素document.getElementsByClassName("类样式的名字");- 根据选择器获取元素document.querySelector("选择器");返回一个对象- 根绝选择器获取元素document.querySelectorAll("选择器");返回数组,多个元素组成的
元素的样式操作
  • 操作基本标签的属性 —— src,title,alt,href,id属性
  • 操作表单标签的属性 —— name,value,type,checked,selected,disabled,readonly
  • 对象.style.属性=值;
  • 对象.className=值;
事件
  • 事件:就是一件事,有 事件源 触发 和 响应
  • this关键字----如果是在当前的元素的事件中使用this,那么this就是当前的对象

    对象,元素,节点
  • 内置对象:系统自带的对象
    • 自定义对象:自己写的对象
    • BOM对象:浏览器对象
    • DOM对象:------->通过DOM方式获取的元素得到的对象
  • document:页面中的顶级对象
  • 元素:element:页面中的标签 标签---元素---对象(通过DOM的方式来获取这个标签,得到了这个对象,此时这个对象叫DOM对象)
  • 节点:Node:页面中所有的内容,标签,属性,文本
    节点的作用:为了将来获取很多节点,得到节点中的标签(元素),识别节点中的标签元素 节点的类型:1标签节点,2属性节点,3文本节点 ???* nodeType:节点的类型,1---标签节点,2----属性节点,3---文本节点 ???* nodeName:标签节点--大写的标签名字,属性节点---小写的属性名字,文本节点---`#text` ???* nodeValue:标签---null,属性---属性的值,文本---文本内容 ???* if(node.nodeType==1&&node.nodeName=="P")那么这就肯定是一个p标签

  • 根元素:html标签

阻止超链接默认跳转
  • return false;
自定义属性
- 自定义属性:标签原本没有这个属性,为了存储数据,程序员自己添加的属性- 自定义属性无法直接通过DOM对象的方式获取或者设置 ?- 对象.getAttribute("自定义属性名字");获取自定义属性的值 ?- 对象.setAttribute("属性名字","值");设置自定义属性及值- 移除自定义属性 ??- 对象.removeAttribute("属性的名字");
元素的创建(3种)
1 document.write("标签代码及内容"); 如果在页面加载完毕后创建元素.页面中的内容会被干掉2 父级对象.innerHTML="标签代码及内容";3 document.createElement("标签名字");得到的是一个对象 ???* 父级元素.appendChild(子级元素对象); ???* 父级元素.inerstBefore(新的子级对象,参照的子级对象); ???* 移除子元素 —— 父级元素.removeChild(要干掉的子级元素对象);
事件的绑定(3种)
1. 对象.on事件名字=事件处理函数 ?????如果是多个相同事件注册用这种方式,最后一个执行之前的会被覆盖 ???my$("btn").onclick=function(){}; ?2. 对象.addEventListener("没有on的事件名字",事件处理函数,false); ???`IE678不支持` ???my$("btn").addEventListener("click",function(){},false);3. 对象.attachEvent("有on的事件名字",事件处理函数); ??????????`谷歌火狐不支持` ???my$("btn").attachEvent("onclick",function(){});
addEventListener 和attachEvent的兼容代码function addEventListener(element,type,fn) { ?????if(element.addEventListener){ ???????element.addEventListener(type,fn,false); ?????}else if(element.attachEvent){ ???????element.attachEvent("on"+type,fn); ?????}else{ ???????element["on"+type]=fn; ?????} ???}
事件解绑
1. 对象.on事件类型=null;2. 对象.removeEventListener("没有on的事件类型",事件处理函数名字,false);3. 对象.detachEvent("有on的事件类型",事件处理函数);
获当前节点的节点,元素
 ???//获取当前节点的父级节点 ???console.log(my$("uu").parentNode); ???//获取当前节点的父级元素 ???console.log(my$("uu").parentElement); ???//获取当前节点的子级节点 ???console.log(my$("uu").childNodes); ???//获取当前节点的子级元素 ???console.log(my$("uu").children); ???//获取当前节点的第一个子级节点 ???console.log(my$("uu").firstChild); ???//获取当前节点的第一个子级元素 ???console.log(my$("uu").firstElementChild); ???//获取当前节点的最后一个子级节点 ???console.log(my$("uu").lastChild); ???//获取当前节点的最后一个子级元素 ???console.log(my$("uu").lastElementChild); ???//获取当前节点的前一个兄弟节点 ???console.log(my$("uu").previousSibling); ???//获取当前节点的前一个兄弟元素 ???console.log(my$("uu").previousElementSibling); ???//获取当前节点的后一个兄弟节点 ???console.log(my$("uu").nextSibling); ???//获取当前节点的后一个兄弟元素 ???console.log(my$("uu").nextElementSibling);
写入,innerText innerHTML
document.getElementsByTagName("p").innerHTML="<p>这是一个p</p>"; ?不仅文本,还能标签等document.getElementsByTagName("p").innerText="这是一个p"; ?只能作用于文本document.write("<p>这是一个p</p>") ???是document对象的一个方法,重绘,既替换之前的整个页面,用的不多
事件冒泡
事件冒泡:元素A中有元素B,都有相同的事件,里面的元素的事件触发了,外面元素的事件也会触发.可以是多个元素嵌套阻止事件冒泡:1. e.stopPropagation(); IE8不支持 ?????e —— 事件参数对象,2. window.event.cancelBubble=true; 火狐不支持 ????window.event —— 事件参数对象,和e是一样的 
定时器
定时器会返回自己的id值,是window对象,但window在写时可省略复用性定时器var timeId=window.setInterval(函数,时间); ??页面加载完毕后,每过一定时间后执行函数window.clearInterval(定时器的id值); ???清理定时器一次性定时器var timeId=setTimeout("alert('hello')",1000); ??页面加载完成后,一定时间后只执行一次函数clearTimeout(timeId);

js大致复习第一遍

原文地址:https://www.cnblogs.com/huihuihero/p/10801056.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved