本章节复习的是JS中的Map和Set对象,是个集合。 前置知识: Map和Set对象是在ES6中被引入的,作为一种由 key值标记的数据容器。...Map和Set对象承载的数据元素可以按照插入时的顺序,被迭代遍历。 1 Set对象 介绍: Set数据结构类似数组,但所有成员的值唯一。...([1,2,3,4,4,4])];// [1,2,3,4] 注意: 向 Set中添加值的时候,不会类型转换,即 5和 '5'是不同的。...对象只能用字符串当做键,给开发带来很大限制,ES6增加 Map数据结构,使得各种类型的值(包括对象)都可以作为键。...博 客 www.pingan8787.com 微 信 pingan8787 每日文章推荐 https://github.com/pingan8787/Leo_Reading/issues ES小册 js.pingan8787
,集合对象,在VBA中也有一个集合对象,叫做Collection。...} 输出:size: 4 Set是不能保存重复值的,所以无法添加重复值到Set中,利用这个特性就可以做去重功能。...vba中的Collection也是无法添加重复值,但是一旦重复添加会报错,Set允许重复去添加,但不会保存重复值,这个特性和vba中使用的字典更像。...Set是JS一种对象,同样有许多的属性和方法,这些属性和方法都是为了方便使用: 判断是否存在某个key:s.has 通过Set创建数组: function testSet2() { var s...的各种对象内置了许多方便的属性和方法,使用起来也非常的灵活方便。
ECMAScript 6 新增的 Set 是一种新集合类型,为这门语言带来集合数据结构。Set 在很多方面都像是加强的 Map,这是因为它们的大多数 API 和行为都是共有的。 基本API 1....创建Set实例 使用 new 关键字和 Set 构造函数可以创建一个空集合: const s = new Set(); 如果想在创建的同时初始化实例,则可以给 Set 构造函数传入一个可迭代对象,其中需要包含插入到新集合实例中的元素...(Set 可以包含任何 JavaScript 数据类型作为值): const s = new Set(["val1", 1, true, {}, undefined, function fun() {}...Set实例转数组 const s = new Set([1, 2, 3]); Array.from(s); // [1, 2, 3] 3. size属性 size: 获取Set实例的元素个数: const...add(2).add(3); s.has(1); // true 6. delete() delete(): 删除Set实例中某个元素(返回布尔值): const s = new Set(); s.add
DOCTYPE html> 03_对象 // 创建对象 var p = { name:
Map中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。 Map的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。...Map对象的属性: size:返回Map对象中所包含的键值对个数 Map对象的方法: set(key, val): 向Map中添加新元素 get(key): 通过键值查找特定的数值并返回 has(key...): 判断Map对象中是否有Key所对应的值,有返回true,否则返回false delete(key): 通过键值从Map中移除对应的数据 clear(): 将这个Map中的所有元素删除 const...Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。 Set中的特殊值: Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。...{} {} 两个空对象的指针不一样,所以会重复 Set实例对象的属性: size:返回Set实例的成员总数。
Js中String对象 String全局对象是一个用于字符串或一个字符序列的构造函数。...描述 创建一个字符串可以通过字面量的方式,通过字面量创建的字符串变量在调用方法的时候能够自动转化为临时的包装对象,从而能够调用其构造函数的原型中的方法,也可以利用String对象生成字符串对象,此外在ES6...事实上,Js中基本数据类型的值不可变,基本类型的值一旦创建就不能被改变,所有操作只能返回一个新的值而不能去改变旧的值。...)); // true String.prototype.indexOf() str.indexOf(searchValue [, fromIndex]) indexOf()方法返回调用String对象中第一次出现的指定值的索引...,如果传入一个非正则表达式对象regexp,则会使用new RegExp(regexp)隐式地将其转换为正则表达式对象,如果匹配成功,则search()返回正则表达式在字符串中首次匹配项的索引,否则返回
Js中Symbol对象 ES6引入了一种新的基本数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名,Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法...该数据类型通常被用作一个对象属性的键值,例如当想使对象属性的键为私有值时。symbol类型的键存在于各种内置的JavaScript对象中,同样自定义类也可以这样创建私有成员。...和Symbol()不同的是,用Symbol.for()方法创建的的symbol会被放入一个全局symbol注册表中。...key: 一个字符串,作为symbol注册表中与某symbol关联的键,同时也会作为该symbol的描述。...在JavaScript中,虽然大多数类型的对象在某些操作下都会自动的隐式调用自身的valueOf()方法或者toString()方法来将自己转换成一个原始值,但symbol对象不会这么干,symbol对象无法隐式转换成对应的原始值
Js中Reflect对象 Reflect是ES6起JavaScript内置的对象,提供拦截JavaScript操作的方法,这些方法与Proxy对象的handlers中的方法基本相同。...() Reflect.set(target, propertyKey, value[, receiver]) 方法Reflect.set()是在一个对象上设置一个属性。...N/A set() N/A 如果在对象上成功设置了属性,则Reflect.set()返回true,否则返回false。...中,它将被强制为不可扩展的普通对象并返回false。...如果目标不是对象,则在ES5中抛出TypeError,但将非对象目标强制为ES2015中的对象 N/A ownKeys() N/A Reflect.ownKeys()返回一个属性名称数组,该属性名称映射到目标对象自己的属性键
描述 arguments 是一个对应于传递给函数的参数的类数组对象。 arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。...arguments[@@iterator] 返回一个新的 Array 迭代器 对象,该对象包含参数中每个索引的值。 特点 arguments对象和Function是分不开的。...因为arguments这个对象不能显式创建。 arguments对象只有函数开始时才可用。 拓展 length 属性 遍历参数来求和。...答案是: 输出结果如下: 10 2 解析: 1.第一次输出的是 10 ,是因为执行了 method 中的第一个 fn() 函数,这时打印出来的 length 指的是 window 中定义的 length...2.第二次输出了 2 ,这时候执行了 method 中的第二句。arguments[0]() ( arguments[0] ==> fn() ),此时的 this 指向到了arguments对象上。
Js中Proxy对象 Proxy对象用于定义基本操作的自定义行为,例如属性查找、赋值、枚举、函数调用等。...handler: 一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理proxy的行为。...var target = {a: 1}; var proxy = new Proxy(target, { set: function(target, key, value, receiver){...代理允许拦截在目标对象上的底层操作,而这原本是Js引擎的内部能力,拦截行为使用了一个能够响应特定操作的函数,即通过Proxy去对一个对象进行代理之后,我们将得到一个和被代理对象几乎完全一样的对象,并且可以从底层实现对这个对象进行完全的监控...handler.set(): 属性设置操作的捕捉器。 handler.deleteProperty(): delete操作符的捕捉器。
js中的对象 在编程语言中,提到对象,一般都含有一个隐藏的上下文面向对象编程。 面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。..., cedf:function(){console.info("cdef")}, "arr":[1,2,3], o:{"name":"jake"} } “在js中,对象是属性的无序集合...1.2 集合 集合是说 对象中可以有很多个属性。属性之间用逗号分隔。 1.3 无序 属性与属性之间,没有先后顺序之分。 对比一下,数组的元素之间有序的。...2. js中对象的分类 众观整个js中的对象,可以分成三类: 内置对象 宿主对象 自定义的对象 2.1 内置对象 “由ECMA实现、不依赖于宿主环境的对象,这些对象在js程序执行之前就已经存在了”。...js有两个运行的环境: (1) 浏览器。我们在.html文件中加入js代码,再通过浏览器来打开,这里浏览器就是javascript的运行环境。 在浏览器端的js而言,宿主对象就是浏览器对象。
Js中Array对象 JavaScript的Array对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。 描述 在JavaScript中通常可以使用Array构造器与字面量的方式创建数组。...当然对于稀疏数组在各种浏览器中会存在优化的操作,例如在V8引擎中就存在快数组与慢数组的转化,此外在V8中对于empty的描述是一个空对象的引用。...此外如果将数组中索引设置为-1或者字符串等,数组的length不会发生改变,此时数组中的这些索引将作为对象的属性处理,实际上数组就是可以按照索引值来排序的数据集合,是一种特殊的对象。...,该对象包含数组中每个索引的键/值对,Array Iterator对象的原型__proto__:Array Iterator上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]。...options 一个可配置属性的对象。 toLocaleString()返回一个字符串表示数组中的元素。
Js中Number对象 JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript的...描述 创建一个数字可以通过字面量的方式,通过字面量创建的数字变量在调用方法的时候能够自动转化为临时的包装对象,从而能够调用其构造函数的原型中的方法,也可以利用Number对象生成数值对象,,JavaScript...Number.prototype: Number对象上允许的额外属性。...作为对比,2^53就不是一个安全整数,它能够使用IEEE-754表示,但是2^53 + 1不能使用IEEE-754直接表示,在就近舍入round-to-nearest和向零舍入中,会被舍入为 2^53。...在旧的实现中,会忽略locales和options参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。
Js中Math对象 Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math用于Number类型,其不支持BigInt。...描述 Math不是一个函数对象,也就是说Math不是一个构造器,Math的所有属性与方法都是静态的,例如引用圆周率的写法是Math.PI,Math的常量是使用JavaScript中的全精度浮点数来定义的...,需要注意的是,很多Math的函数都有一个精度,而且这个精度在不同实现中也是不相同的,这意味着不同的浏览器会给出不同的结果,甚至在不同的系统或架构下,相同的Js引擎也会给出不同的结果,另外三角函数sin...// 数字1.5可以在二进制数字系统中精确表示,32位和64位的值相同 console.log(Math.fround(1.5) === 1.5); // true // 数字6.6却无法在二进制数字系统中精确表示...Math.max()函数返回一组数中的最大值。
Js中Date对象 JavaScript的Date对象是用于处理日期和时间的全局对象,Date对象基于Unix Time Stamp,即自1970年1月1日UTC起经过的毫秒数。...分别提供日期与时间的每一个成员: 当至少提供了年份与月份时,这一形式的Date()返回的 Date对象中的每一个成员都来自提供的参数,没有提供的成员将使用最小可能值,对日期为1,其他为0。...,为基于0的值,0表示一年中的第一月。...dayValue: 从1到31之间的整数,表示月份中的第几天,0为上个月最后一天。...在旧版本浏览器中,locales和options参数被忽略,使用的语言环境和返回的字符串格式是各自独立实现的。
Js中RegExp对象 RegExp对象表示正则表达式,是由普通字符和特殊字符也叫元字符或限定符组成的文字模板,用于对字符串执行模式匹配。...,返回一个结果数组或null,在设置了global或sticky标志位的情况下,RegExp对象是有状态的,其会将上次成功匹配后的位置记录在lastIndex属性中,使用此特性exec()可用来对单个字符串中的多次匹配结果进行逐条的遍历包括捕获到的匹配...,如果传入一个非正则表达式对象regexp,则会使用new RegExp(regexp)隐式地将其转换为正则表达式对象,如果匹配成功,则search()返回正则表达式在字符串中首次匹配项的索引,否则返回...,返回一个结果数组或null,在设置了global或sticky标志位的情况下,RegExp对象是有状态的,其会将上次成功匹配后的位置记录在lastIndex属性中,使用此特性exec()可用来对单个字符串中的多次匹配结果进行逐条的遍历包括捕获到的匹配...(pattern): 匹配pattern并获取这一匹配,所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JS中则使用1…9属性,要匹配圆括号字符,请使用
如何在set中存储自定义对象? set是什么 假设你已经在C++中使用过set,那么你应该知道,set中存储的元素是去重的。...中只有三个元素。...如何在set中存储自定义对象 有时候,我们可能想通过set做一下去重的事情,对于基本数据类型,set都能很好地处理。我们看看对于自定义的对象,它的结果如何呢?...如果他们两个都返回false,则认为重复,重复的元素不会被插入到容器中。 当然需要注意的是,如果xy应为false,所以这里应该避免两个都返回true,否则将会出现未知行为。...总结 对于自定义对象存储在set中,如果我们希望它按照我们指定的规则去重,就可能需要重载operator<了,那么是不是只有这一种方法呢?
Set 是一个构造函数,它有一个可选的参数一个可迭代对象。如果传递了这个参数它的所有元素将不重复地被添加到新的 Set中。如果不指定此参数或其值为null,则新的Set为空。...delete(value) 可以从一个Set对象中删除指定的元素,成功删除返回 true,否则返回false。 clear() 用来清空一个Set对象中的所有元素,返回undefiend。...Set.prototype 原型 WeakSet WeakSet和Set类似,但是有两点不同: WeakSet对象中只能存放对象引用, 不能存放值, 而Set对象都可以....它和 JS 对象不同,JS 对象只能用字符串和Symbol作为键,而Map可以使用任何值。 除了键类型上的不同,它和Object还有以下不同: Map中的键值是有序的,而添加到对象中的键则不是。...它和Map类似,但有两点不同: WeakSet对象中只能存放对象引用, 不能存放值, 而Set对象都可以。
JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。...clearTimeout(对象) 清除已设置的setTimeout对象 clearInterval(对象) 清除已设置的setInterval对象 setInterval() 方法可按照指定的周期(以毫秒计...在window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。...JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。...,就需要在执行的程序中再定时调用自己才行。
<!DOCTYPE html> <html> <head> <title> </title> <meta name="viewport" conte...
领取专属 10元无门槛券
手把手带您无忧上云