js基础2
什么是DOM?
DOM:文档对象模型(Document Object Model),又称为文档树模型。是一套操作HTML文档的API。
什么是文档对象模型?
DOM将html文档看成了一个对象,html文档中的所有内容都封装成了一个一个的对象。
因此我们学习DOM就是学习这些对象的属性和方法。
所有的内容:标签、属性、文本、注释,这些都被封装成了对象
什么是API?
api就是工具,做不同的事情需要不同的工具(api)
DOM:用来操作页面元素的一套API。BOM:用来操作浏览器一些行为的一套API。
DOM中的相关概念
文档:DOM会把整个html文档看成了一个对象,这个对象就document。
节点(Node):DOM会把页面中所有的内容都看成对象,我们把这些称为节点(节点都是对象)
节点有哪些?
标签节点、文本节点、属性节点、注释节点
元素(element):标签节点通常被称为元素,因为我们一般来说操作的都是元素(元素都是节点)
节点的层级关系:
父节点、子节点、兄弟节点
DOM可以做什么?
找对象、设置元素的属性、绑定事件、设置元素的样式、动态创建元素
console.log(cat);//第一次是以标签的形式展现的,刷新后按对象的形式展现
console.dir(cat);//直接以对象的形式展示出来。
修改DOM对象的属性: cat.src = "images/tiget.jpg";
在DOM中,script标签不能写到head标签里面,因为这个时候,页面还没有加载,
会出现获取不到页面中的元素的情况,因此我们一般会把script标签写到<./body>的上面
什么是事件?
事件就是文档或者窗口的一个特定的交互瞬间
事件的三要素:
事件源、事件名称、事件处理程序
标签自定义属性,无法通过DOM对象的属性来获取(在IE678中是可以获取得到的)。 想要获取标签的自定义属性,应该使用getAttribute方法
节点的属性
element.getAttributeNode("id");//获取到的是属性节点
nodeType:节点类型
1=元素节点 2=属性节点 3=文本节点
nodeName:节点名称
元素节点:标签的名称 文本节点:#text 属性节点:属性名称
nodeValue:节点的值
元素节点:null 文本节点:文本内容 属性节点:属性值
节点的层次
childNodes 子节点(包括元素节点和其他很多类型的节点)
children 子元素 (虽然不是DOM标准中的方法,但没有兼容性)
nextSibling 下一个兄弟节点
nextElementSibling 下一个兄弟元素 有兼容性问题
previousSibling 上一个兄弟节点
previousElementSibling 上一个兄弟元素 有兼容性问题
firstChild 第一个节点
firstElementChild 第一个子元素 有兼容性问题
lastChild 最后一个节点
lastElementChild 最后一个子元素 有兼容性问题
parentNode 父节点 没有兼容性问题
什么时候用style,什么时候用class?
如果某一个样式,一直都在变化,需要用style(动画)
如果需要设置的样式比较多的时候,用class
如果只需要设置一个样式,用style方便一点
使用class写的代码会比style更加好维护一点
克隆元素
cloneNode() 默认是浅复制,只会复制标签,不会复制内容
cloneNode(true) 深度复制,会复制标签和内容
cloneNode 只会在内存里面复制,并没有添加到DOM树上
预解析
预解析:js解释器在执行js代码的时候会有一个预解析的过程。它首先会把变量
和函数的声明提升到当前作用域的顶部,然后再开始执行代码。
作用域与作用域链
全局作用域:js编程环境的顶级对象是window对象的范围,被称为全局作用域,全局作用域
中的定义变量称为全局变量(函数外面)。
函数作用域:js的作用域是函数级的,在函数的代码块中被称为函数作用域,在函数作用域中
定义的变量被称为局部变量。函数在调用结束时,该函数作用域会被销毁,里面的所有局部变量也会被销毁。
js的函数可以嵌套,多个函数之间的层层嵌套构成了多个作用域的层层嵌套,被称为作用域链。 js作用域链的访问规则:如果当前作用域存在要访问的变量,则使用当前作用域的变量,否则到上一层的 作用域内进行寻找,直到全局作用域,如果找不到,则该变量未声明。
js函数内的变量无法在函数外面访问,但是可以在函数内部访问函数外的变量。 没有块级作用域
高阶函数
递归函数:函数自身调用自身(要有出口)
`function getFibonacci(n){
if(n == 1 || n == 2){
return 1;
}
return getFibonacci(n-2)+getFibonacci(n-1);
}
console.log(getFibonacci(12));`
回调函数:函数也是一种数据类型,因此函数也能当成参数进行传递
数据存储
简单数据类型:
Number、String、Boolean、Undefined、Null
复杂(引用)数据类型
Object、Array、Date、Math、自定义对象等
内存划分:
栈:内存比较小,但是运算速度很快
堆:内存比较大,但是运算速度相对较慢
数据存储:
基本(简单)类型,保存在栈里面。因为基本数据类型占用内存小。
引用(复杂)类型,保存在堆里面。因为占用内存比较多,因此,但是对象的引用保存在栈里面。
对于基本数据类型,复制的时候会把值复制一份给另一个变量,这个时候,两个变量num1和num2有了各自的值。互不干扰。
引用类型在复制的时候,仅仅会复制一份引用,但是两个引用指向的还是同一个对象,任何一个引用改变,
都会影响到对象。(来啊,互相伤害呀!)
使用基本类型作为参数的时候,形参的改变是不会影响实参的。
当参数是引用类型的时候,形参对对象做的改变,也影响到了实参,因为形参和实参指向的是同一个对象。
js基础2的更多相关文章
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- js 基础
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
- js基础练习二之简易日历
今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- JS基础(超级简单)
1 JS基础(超级简单) 1.1 数据类型 1.1.1 基本类型: 1) Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2) ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- JS基础知识总结
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...
- js基础篇——call/apply、arguments、undefined/null
a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...
- js基础知识总结(2016.11.1)
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
随机推荐
- spring 参数绑定
部分资料来源: @RequestParam @RequestBody @PathVariable 等参数绑定注解详解 spring学习之@ModelAttribute运用详解 Spring MVC @ ...
- 用Burpsuite破解网站密码
burpsuite专业版 一个网站 方法/步骤 1 切换至proxy选项卡的Option选项下,设置代理地址和端口:127.0.0.1:8080. 2 启动刚刚设置的代理 3 打开Internet ...
- SQL分组多列统计(GROUP BY后按条件分列统计)
as tjsl from fyxx group by zt,whbmbh end) as ybhsl from fyxx group by whbmbh 下面是摘自别人的博客 最近遇到一个问题,需要对 ...
- 关于清除arp 缓存的那点事儿
在Linux下,清除arp缓存表,例如: arp -d 10.0.3.6 我们可以用上面这条命令清除某一条记录,也可以用 arp -n |awk '/^[1-9]/{print "arp - ...
- C#操作access和SQL server数据库代码实例
在C#的学习中,操作数据库是比较常用的技术,而access和sql server 数据库的操作却有着不同.那么,有哪些不同呢? 首先,需要引用不同的类.因为有着不同的数据引擎. access:usin ...
- MySql: 常见sql语句
1. show create table mysql> show create table t \G*************************** 1. row ************ ...
- sudo:有效用户 ID 不是 0,sudo 属于 root 并设置了 setuid 位吗
遇见这种问题应该检查sudo文件拥有者名称 ---x--x--x. 1 cmp cmp 130720 sudo 明显拥有者有问题 chown root:root /usr/bin/sudo chmo ...
- UFLDL 教程三总结与答案
主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法.更重要的是,理解PCA算法,对实现白化算法有很大的帮助,很多算法都先用白化算法作预处理步骤.这里以处理自然图像为例作解释. 1. ...
- mybatis如何做分页处理
1.首先根据自己实际需求编写实体类 import java.io.Serializable; public class User implements Serializable{ //最好将该实体类序 ...
- Mittag-Leffler定理,Weierstrass因子分解定理和插值定理
Mittag-Leffler定理 设$D\subset\mathbb C$为区域,而$\{a_{n}\}$为$D$中互不相同且无极限点的点列,那么对于任意给定的一列自然数$\{k_{n}\}$, ...