当使用 JavaScript 的 DOM 操作 修改 HTML 标签元素的样式时 , 有两种主要的方法 : 行内样式操作 element.style 类名样式操作 element.className.../ element.classList 二、行内样式操作 1、行内样式操作 使用 element.style 可以直接在 JavaScript 中 设置元素的 行内样式 ; 行内样式 会直接作用于该元素..., 类名通常与在 CSS 样式表中定义的一组样式相关联 ; 获取元素类名 : // 获取元素 var element = document.getElementById('myElement');...简介 Element.classList 是 元素的类属性的实时 DOMTokenList 集合 , 这个 DOMTokenList 集合提供了一系列的方法来进行类名的增删改查操作 , 从而让你能够更方便地管理元素的类...这个方法非常有用,因为它允许你 通过简单地切换类名来改变元素的样式,而不需要编写额外的逻辑来检查类名是否已存在 ; Element.classList#add 函数原型 : element.classList.toggle
在HTML5 API里,页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增、删除、修改节点上的CSS类。...1、新增CSS类 使用add方法,你可以往页面元素是新增一个或多个css类: myDiv.classList.add('myCssClass');类的有无 myDiv.classList.toggle('myCssClass'); //现在是增加 myDiv.classList.toggle('myCssClass'); //现在是删除...,当myDiv元素上没有这个CSS类时,它就新增这个CSS类;如果myDiv元素已经有了这个CSS类,它就是删除它。...)都支持这个classList类,所以,相信新型的javaScript类库里都会使用classList类来操作页面CSS类,而不需像以前一样去分析元素节点的class属性!
(2)友元 类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。 以friend关键字标识。 友元不是类的成员,不受访问控制级别的约束。...一般的,应该尽量减少捕获的数据量,来避免潜在的问题。 如果可能,避免捕获指针或引用。 ::: 隐式捕获: 当混合使用隐式捕获和显式捕获时,捕获列表中的第一个元素必须是一个&或=。...++语言中,当我们使用基类的引用(或者指针)调用一个虚函数时将发生动态绑定(也称运行时绑定)。...::: warning 当我么用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值,它的派生类部分会被忽略掉。...派生类的析构函数: 派生类函数只负责销毁由派生类自己分配的资源。 15.8 容器与继承 当使用容器存放继承体系中的对象时,必须采用间接存储的方式。因为不允许在容器中保存不同类型的元素。
17.在Java中,HashMap是如何工作的? HashMap在Map.Entry静态内部类实现中存储key-value对。...当我们通过传递key调用get方法时,它再次使用hashCode()来找到数组中的索引,然后使用equals()方法找出正确的Entry,然后返回它的值。下面的图片解释了详细内容。...Java1.5并发API包括一些集合类,允许迭代时修改,因为它们都工作在集合的克隆上,所以它们在多线程环境中是安全的。 29.并发集合类是什么?...Java.util.concurrent.BlockingQueue是一个队列,在进行检索或移除一个元素的时候,它会等待队列变为非空;当在添加一个元素时,它会等待队列中的可用空间。...31.队列和栈是什么,列出它们的区别? 栈和队列两者都被用来预存储数据。java.util.Queue是一个接口,它的实现类在Java并发包中。队列允许先进先出(FIFO)检索元素,但并非总是这样。
最重要的是,使用jQuery在一个浏览器中构建的JavaScript特性通常也可以在其他浏览器中工作。...实现CSS类名切换; CSS现在支持在样式表而不是JavaScript中定义可视化动画; $.ajax请求可以使用Fetch标准执行; addEventListener()接口足够稳定,可以跨平台使用;...我们维护了一个jQuery的定制版本,当我们发现不再使用jQuery的某个模块时,我们会将其从定制版本中删除并发布一个更精简的版本。...因此,即使那些使用JS增强的web表单和其他UI元素通常也会在浏览器中禁用JavaScript。在某些情况下,我们能够完全删除某些遗留行为,而不必在vanilla JS中重写它们。...这意味着我们将尽可能多的内容保存在标记中,并且只在标记上添加行为。
每节车皮都是列表的元素,车皮间的连接就是指针。---链表的好处添加或移除元素的时候不需要移动其他元素,这是链表最大的好处。存储多个元素,数组或列表是最常用的数据结构。...然而,在大多数语言中这种数据结构有一个缺点:数组的大小是固定的,从数组的起点或中间插入或移除项的成本很高,因为需要移动元素。链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。...然而,链表的缺点是访问链表中的特定元素的时间复杂度较高,需要从头开始遍历链表直到找到目标节点。---详细的看一下列表在JavaScript中,可以使用对象来实现链表。...= current; //跳出循环时,current变量对想要插入新元素的位置之后一个元素的引用 //而previous将是对想要插入新元素的位置之前一个元素的引用。...}; 查看链表头元素需要在类的实现外部循环访问列表,就需要提供一种获取类的第一个元素的方法。
每节车皮都是列表的元素,车皮间的连接就是指针。 ---- 链表的好处 添加或移除元素的时候不需要移动其他元素,这是链表最大的好处。 存储多个元素,数组或列表是最常用的数据结构。...然而,链表的缺点是访问链表中的特定元素的时间复杂度较高,需要从头开始遍历链表直到找到目标节点。 ---- 详细的看一下列表 在JavaScript中,可以使用对象来实现链表。...node.next = current; //跳出循环时,current变量对想要插入新元素的位置之后一个元素的引用 //而previous将是对想要插入新元素的位置之前一个元素的引用。...; }; 查看链表头元素 需要在类的实现外部循环访问列表,就需要提供一种获取类的第一个元素的方法。...toString():由于列表项使用了Node类,就需要重写继承自JavaScript对象默认的toString方法,让其只输出元素的值。
本节中我们定义一个类StrBlob类,它使用动态内存主要是为了让多个对象能共享相同的底层数据。...直接管理内存 2.1 使用new动态分配和初始化对象 需要注意如下几点: 动态分配的对象执行默认初始化:内置类型或组合类型的对象的值是未定义的,而类类型对象的值用默认构造函数进行初始化 值初始化的内置类型对象有着良好定义的值...使用shared_ptr来管理这种哑类已经被证明是一种有效的方法。 使用shared_ptr管理动态对象时,它默认地对它管理的指针进行delete操作。...如果我们在delete一个指向数组的指针时忽略了方括号,或者在delete一个指向单一对象的指针时使用了方括号,其行为是未定义的。 3....当我们使用完对象之后,必须对每个构造的元素使用destroy来销毁它们。 一旦元素被销毁后,就可以重新使用这部分内存来保存其他string,也可以将其归还给系统。
call是直接传递函数的实参而apply需要将实参封装到一个数组中传递 # arguments arguments和this类似,都是函数中的隐含的参数 arguments是一个类数组元素,它用来封装函数执行过程中的实参...全局作用域中有一个全局对象window,window对象由浏览器提供, 可以在页面中直接使用,它代表的是整个的浏览器的窗口。...当我们去访问对象的一个属性或调用对象的一个方法时,它会先自身中寻找, 如果在自身中找到了,则直接使用, 如果没有找到,则去原型对象中寻找,如果找到了则使用, 如果没有找到,则去原型的原型中寻找,依此类推...: 对象.hasOwnProperty("属性名") ---- # 数组(Array) 数组也是一个对象,是一个用来存储数据的对象 和Object类似,但是它的存储效率比普通对象要高 数组中保存的内容我们称为元素...value:正在遍历的元素 index:正在遍历元素的索引 obj:被遍历对象 ---- # 包装类 在JS中为我们提供了三个包装类: String() Boolean() Number() 通过这三个包装类可以创建基本数据类型的对象
它们是: 容量(Capacity) 缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。 上界(Limit) 缓冲区的第一个不能被读或写的元素。...标记最初未定义。容量是固定的,但另外的三个属性可以在使用缓冲区时改变。...缓冲区管理着固定数目的数据元素。但在任何特定的时刻,我们可能只对缓冲区中的一部分元素感兴趣。换句话说,在我们想清空缓冲区之前,我们可能只使用了缓冲区的一部分。...分配操作创建一个缓冲区对象并分配一个私有的空间来储存容量大小的数据元素。包装操作创建一个缓冲区对象但是不分配任何空间来储存数据元素。它使用您所提供的数组作为存储空间来储存缓冲区中的数据元素。...数据元素可以直接存取,无论它们是存储在数组中还是以一些其他的方式,而不需经过原始缓冲区对象的 get()/put()API。如果原始缓冲区是直接缓冲区,该缓冲区的视图会具有同样的效率优势。
如果返回false,则有可能正在执行其他函数,这些函数是专门在click内编写的,而preventDefault则不允许执行任何操作。...()该方法返回在该给定元素可以在阵列中可以发现,或-1,如果它不存在的第一个索引。...: 要将类添加到元素中而不删除或影响现有值,请添加空格和新的类名称,如下所示: document.getElementById("test").className += " newClass"; 要从元素中删除类...当我们想检查对象的特定属性是否未定义时,我们可以直接使用if条件和===运算符进行检查。...当我们从无法控制的第三方API中获取一些数据时,就会出现这种情况。我们如何将字符串转换为对象数组以在我们的应用程序中使用?
我们在 for 循环中看到这个: for(let i = 0, ii = 1; i< 10; i++, ii--) { ... } 当我们要编写短的 lambda 函数时,这会派上用场: const lb...第二个结果就是返回给调用者的内容。 对于三元运算符,它也很有用,因为与短lambda语法相同,它仅接受表达式而不是语句。 二、in in 是用于检查对象中属性是否存在的关键字。...我们在 for..in 循环中使用了它,但没有意识到,其实 in 也是一个关键字:) 如果对象上存在属性,则 in 将返回 true ,否则将返回 false。...它将检查 "prop" 是否可作为 o 对象中的属性使用。 它返回 true ,因为我们在 o 中定义了 "prop" 属性。...如果增加 length 属性,则 JS 引擎将添加元素(未定义的元素)以使数组中的元素数量达到 length 属性的值。
而当我们需要对集合中的元 素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。...遍历是指每一个元素逐一进行处理,而并不是从 第一个到最后一个顺次处理的循环。前者是目的,后者是方式。...直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印。代码 中并没有体现使用线性循环或是其他任何算法进行遍历,我们真正要做的事情内容被更好地体现在代码中。...1.5 练习:集合元素处理(传统方式) 题目 现在有两个 ArrayList 集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以 下若干操作步骤: 第一个队伍只要名字为...第一个队伍筛选之后只要前3个人;存储到一个新集合中。 第二个队伍只要姓张的成员姓名;存储到一个新集合中。 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
,当数组长度不够时,其内部会创建一个更大的数组,然后将原数组中的数据拷贝至新数组中,而 LinkedList 是双向链表结构,内存不用连续,所以用多少申请多少。...(Stack)更快些,不过在最新的 JVM 中,这两个类的速度差别是很小的,几乎可以忽略不计;而 LinkedList 是双向链表实现,根据索引访问元素时需要遍历寻找,性能略差。...答案: 当我们往 HashMap 中 put 元素时,先根据 key 的 hash 值得到这个元素在数组中的位置(即下标),然后把这个元素放到对应的位置中,如果这个元素所在的位子上已经存放有其他元素就在同一个位子上的元素以链表的形式存放...中的元素,而不需要指定比较器, 实现 Comparable 接口必须修改自身的类(即在自身类中实现接口中相应的方法),如果我们使用的类无法修改(如SDK中一个没有实现Comparable的类),我们又想排序...LRU 是一种流行的替换算法,它的全称是 Least Recently Used,最近最少使用,它的思路是最近刚被使用的很快再次被用的可能性最高,而最久没被访问的很快再次被用的可能性最低,所以被优先清理
三、从循环内的列表中删除元素 ---- 考虑以下代码,该代码在迭代期间删除元素: ArrayList list = new ArrayList(Arrays.asList...删除元素后,列表的大小会缩小,索引也会更改。因此,如果您想通过使用索引删除循环中的多个元素,那将无法正常工作。...您可能知道使用迭代器是删除循环内元素的正确方法,并且您知道 Java中的 foreach循环就像迭代器一样工作,但实际上并非如此。...但是对于每个不同的值,它都需要一个单独的对象,并且太多的对象可能会导致垃圾回收的高成本。在可变和不可变之间进行选择时应保持平衡。通常,使用可变对象以避免产生太多中间对象。...因为未定义默认的超级构造函数,所以会发生此编译错误。在Java中,如果类未定义构造函数,则编译器将默认为该类插入默认的无参数构造函数。
通常,使用 vector是最好的选择,除非你有很好的理由选择其他容器。当不确定使用那种容器时,可以在程序中只是用 vector和 list公共的操作:使用迭代器,不使用下标操作,避免随机访问。...除 array之外,其他容器的默认构造函数都会创建一个指定类型的空容器,而 array默认构造的容器是非空的:它包含了与其大小一样多的元素,这些元素都被默认初始化。...非成员版本的 swap在泛型编程中非常重要,统一使用非成员版本的 swap是一个好习惯! 容器的相等运算符实际上是使用元素的 = 运算符实现比较的,而其他关系运算符是使用元素的 < 运算符。...---- 9.3 顺序容器操作 用一个对象初始化容器,或将一个对象插入到容器中时,实际上放入倒容器中的是对象值的一个拷贝,而不是对象本身。...在遍历操作中删除某些特定值时,可以使用如下语句递增循环变量。 iter = vec.erase(iter); 由于 forward_list中结点只存有后继节点的地址,无法访问其前驱。
该属性用于在元素中添加,移除及切换 CSS 类。 classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它。 ...false - 元素中不存在该类名 3.item(index) 返回类名在元素中的索引值。...移除元素中一个或多个类名 5.toggle(class,true| false) 在元素中切换类名 第一个参数为要在元素中移除的类名,并返回 false。 ...第二个是可选参数,是个布尔值用于设置元素是否强制添加 或移除类,不管该类名是否存在 4.eval() eval() 函数计算JavaScript 字符串,并把它作为脚本代码来执行...async 属性仅适用于外部脚本(只有在使用 src 属性时)。
数组中的每一个元素,都存储在小小的内存单元中,并且元素之间紧密排列,既不能打乱元素的存储顺序,也不能跳过某个存储单元进行存储。 既然有顺序存储,那么一定就有无序存储咯?...什么是链表 在计算机科学中,链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。...使用链表实现无序列表 Node 类 上文我们提到了一个例子,一个链表如果存在,那么我们需要知道它第一个元素的位置,让计算机清楚它应该从哪里开始寻找元素,还要告诉最后一个元素它没有下一个元素,让计算机懂得停止寻找元素...在数组章节中,我们考虑了很多情况,在末尾,在开头,在中间加入新的元素,尤其是将元素插入到数组中间,处理起来非常的费劲,插入一个元素,剩下的不少元素都要为它腾出位置。...当我们使用循环进行元素遍历时,查找到要删除的节点时,cur 已经指向了要被删除的节点,还记得我们刚刚说的么?
领取专属 10元无门槛券
手把手带您无忧上云