首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript Set has()方法的行为与我定义传入的参数的方式不同

JavaScript中的Set对象是一种集合数据结构,它允许存储唯一的值,无论是基本类型还是对象引用。Set对象提供了一系列方法来操作集合,其中之一就是has()方法。

has()方法用于检查Set对象中是否存在指定的元素,并返回一个布尔值。如果存在该元素,则返回true;否则返回false。

与其他集合类型相比,Set对象的has()方法在判断元素是否存在时,与传入的参数的方式有所不同。具体来说,它使用的是严格相等(===)的方式进行比较。

严格相等是指在比较时不会进行类型转换,只有在类型和值都相等的情况下才会返回true。如果传入的参数与Set对象中的某个元素在类型或值上有所不同,has()方法将返回false。

下面是一个示例:

代码语言:txt
复制
const set = new Set();
set.add(1);
set.add('2');
set.add(true);

console.log(set.has(1)); // true
console.log(set.has('1')); // false,类型不同
console.log(set.has('2')); // true
console.log(set.has(true)); // true
console.log(set.has(false)); // false,值不同

在上面的示例中,我们创建了一个Set对象,并向其中添加了一个数字1、一个字符串'2'和一个布尔值true。然后,我们使用has()方法来检查Set对象中是否存在特定的元素。

需要注意的是,has()方法只能用于判断基本类型的值或对象引用是否存在于Set对象中,它无法判断两个对象是否相等,因为对象的比较是基于引用的。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 函数定义的几种不同方式

在这篇中我们主要将函数的概念和函数声明的几种方式,牵扯到的还有函数中的形参和实参传参的问题,除此之外我们还会说一说 最常用 return 的作用,以及函数中处理参数的 arguments 等。...调用函数 => 函数名() 函数的参数 形参:形式上的参数,在函数定义的时候传递的参数,当前并不知道是什么 实参:实际的参数,函数调用的时候传递的参数,实参是传递给形参的 注意:多个参数之间用逗号 “,...” 隔开 作用:因为在函数的内部,某些值不能固定,所以我们可以通过参数在调用函数时传递不同的值进去 注意:需要注意的是,前端中任何的符号,例如 逗号(,) 冒号(:)等 都是英文状态下的。...arguments 对象,arguments 中存储了传递的所有实参,arguments 中存储的是伪数组 伪数组: 具有数组 length 的属性 按照索引的方式存储 它没有真正数组的方法 pop(...在函数声明中,上面说的这种是利用关键字声明自定义函数,称之为:命名函数,函数声明还有另外一种方式:匿名函数,也叫做函数表达式 // 函数的两种声明方式// 1、利用函数关键字自定义函数(命名函数)function

76721
  • WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为的不同

    本文记录 WPF 在 .NET Framework 4.5 和 .NET Core 3.0 或更高版本对使用 Binding 下的 TwoWay 双向绑定模式绑定到非公开的 set 属性上的行为变更 在...set 方法一样,可以成功写入 但是在 .NET Core 3.0 开始,此绑定将会提示 XamlParseException 而抛出异常 如以下的 ViewModel 代码,包含了一个 Name 属性...经过我的考古,在 .NET Framework 4.6 下的行为就和 .NET Core 3.0 版本相同,是会抛出异常 敲黑板,使用双向绑定到非公开 set 方法的属性上的行为变更,不是 .NET Framework...set 为私有,那也就是从设计上不要让其他逻辑进行设置,自然在 XAML 里对非公开设置的属性进行写入也是非预期的,抛出异常符合设计 本文所有代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码...如有任何疑问,请与我联系。

    1.2K20

    ES6 系列之 defineProperty 与 proxy

    set 一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。...由 getter 和 setter 定义的属性称做”存取器属性“。 当程序查询存取器属性的值时,JavaScript 调用 getter方法。这个方法的返回值就是属性存取表达式的值。...当程序设置一个存取器属性的值时,JavaScript 调用 setter 方法,将赋值表达式右侧的值当做参数传入 setter。从某种意义上讲,这个方法负责“设置”属性值。...,并且可以根据属性值的改变,添加回调函数,棒棒哒~ proxy 使用 defineProperty 只能重定义属性的读取(get)和设置(set)行为,到了 ES6,提供了 Proxy,可以重定义更多的行为...我们来看看它的语法: var proxy = new Proxy(target, handler); proxy 对象的所有用法,都是上面这种形式,不同的只是handler参数的写法。

    53120

    深入浅出 JavaScript Reflect API

    Reflect 使你能够轻松地修改现有对象的功能,同时仍然提供其默认行为。 1. 什么是 JavaScript Reflect?...与 Reflect 不同,JavaScript 的 Proxy 没有任何属性。相反,它封装另一个对象并拦截其操作。...它包含三个参数: target:要调用的函数 thisArgument:target 函数调用时绑定的 this 对象 argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象...该方法有三个参数: target:目标对象 propertyKey:要定义或修改的属性的名称 attributes:要定义或修改的属性的描述 「返回值:」 Boolean 值指示了属性是否被成功定义 让我们看看下面的例子...:一个布尔值,仅当属性在相关对象的属性枚举过程中出现时返回 true 3.11 Reflect.has() Reflect.has() 方法验证是否在目标对象中定义了属性。

    46220

    野生前端的数据结构基础练习(6)——集合

    参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Set 集合的基本知识 定义: 集合Set是一种不包含不同元素的数据结构...2.修改Set类,将存储方式从数组替换为链表,并写一段代码测试该修改。 3.为Set类增加一个higher(element)方法,该方法返回比传入元素大的元素中最小的一个,并写一段代码来测试该功能。...4.为Set类增加一个lower(element)方法,该方法返回比传入元素小的元素中最大的一个,并写一段代码来测试该功能。...1.数组去重 借助集合可以实现js中最简洁的数组去重方式: //实现了Iterable接口的数据结构都可以作为初始化Set的参数 cosnt uniqueArr = [...new Set(arr)];...3.数学特性 原生Set类并没有定义集合的数学运算操作方法,因为可以很方便的直接实现: //并集 let union = new Set([...a,...b]); //交集 let intersect

    52830

    JavaScript 编程精解 中文第三版 六、对象的秘密

    虽然没有人真正同意其精确定义,但面向对象编程已经成为了许多编程语言的设计,包括 JavaScript 在内。 本章将描述这些想法在 JavaScript 中的应用方式。...你可以把this看作是以不同方式传递的额外参数。 如果你想显式传递它,你可以使用函数的call方法,它接受this值作为第一个参数,并将其它处理为看做普通参数。...JavaScript 的原型系统可以创建一个新类,就像旧类一样,但是它的一些属性有了新的定义。 新类派生自旧类的原型,但为set方法增加了一个新的定义。...我们正在重新定义set,但是想要使用原来的行为。 因为this.set引用新的set方法,所以调用这个方法是行不通的。 在类方法内部,super提供了一种方法,来调用超类中定义的方法。...写一个名为Group的类(因为Set已被占用)。 像Set一样,它具有add,delete和has方法。

    1.7K60

    Vue3 源码解析(六):响应式原理与 reactive

    而依赖收集和派发更新的方式在 Vue3 中也变得不同,在这里我先快速的整体描述一下:在 Vue3 中,通过 track 的处理器函数来收集依赖,通过 trigger 的处理器函数来派发更新,每个依赖的使用都会被包裹到一个副作用...这里需要注意的是 baseHandlers 和 collectionHandlers 的区别,这两个参数会根据 target 的类型进行判断,最终选择将哪个参数传入 Proxy 的构造函数,当做 handler...而函数的内部返回了一个 get 函数,使用高阶函数的方式返回将会传入 handlers 中 get 参数的函数。...至此,get 陷阱的逻辑全部结束了。 set 陷阱 与 createGetter 对应,set 也有一个 createSetter 的工厂函数,也是通过柯里化的方式返回一个 set 函数。...接下来调用 Reflect.set 获取默认行为的 set 返回值 result。

    1.4K41

    lodash源码分析之Hash缓存

    lodash 会根据不同的数据类型选择不同的缓存方式,Hash 便是其中的一种方式,这种方式只能缓存 key 的类型符合对象键要求的数据。...Hash 只接收一个二维数组作为参数,调用方式如下: new Hash([['tes1',1],['test2',2],['test3',3]]) 其中子项中的第一项会作为 key ,第二项是需要缓存的值...接着遍历传入的二维数组,调用 set 方法,初始化缓存的值。将子项的第一项作为 key ,第二项为缓存的值。 clear clear() { this....我们都知道, Object.create 的第一个参数为创建对象的原型对象,传入 null 的时候,返回的就是一个真空对象,即没有原型的对象,因此不会有原型属性的干扰,用来做缓存对象十分适合。...lodash 的处理方式是将 undefined 的值转换成 HASH_UNDEFINED ,也即一开始便定义的 __lodash_hash_undefined__ 字符串来储存。

    1.1K70

    lodash源码分析之Hash缓存

    lodash 会根据不同的数据类型选择不同的缓存方式,Hash 便是其中的一种方式,这种方式只能缓存 key 的类型符合对象键要求的数据。...Hash 只接收一个二维数组作为参数,调用方式如下: new Hash([['tes1',1],['test2',2],['test3',3]]) 其中子项中的第一项会作为 key ,第二项是需要缓存的值...接着遍历传入的二维数组,调用 set 方法,初始化缓存的值。将子项的第一项作为 key ,第二项为缓存的值。 clear clear() { this....我们都知道, Object.create 的第一个参数为创建对象的原型对象,传入 null 的时候,返回的就是一个真空对象,即没有原型的对象,因此不会有原型属性的干扰,用来做缓存对象十分适合。...lodash 的处理方式是将 undefined 的值转换成 HASH_UNDEFINED ,也即一开始便定义的 __lodash_hash_undefined__ 字符串来储存。

    1.1K90

    Vue面试必须会的Proxy

    什么是Proxy Proxy是ECMAScript新增的api。可以为开发者提供拦截并向基本操作嵌入额外的行为的能力。...使用代理的主要目的是可以定义捕获器(trap)。捕获器就是在处理程序对象中定义的“基本操作的拦截器”。...每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为。 捕获器(trap)是从操作系统中借用的概念。...对应的反射API方法为Reflect.set()。...捕获其他基本操作 代理的捕获器可以捕获13种不同的基本操作。这些操作有各自不同的反射API方法、参数、关联ECMAScript操作和不变式。 下面列出几个可捕获的,常用的基本操作。

    31130

    ES6--Set、Map、Symbol、Proxy及Reflect

    它类似于数组,但是成员的值都是唯一的,没有重复的值。之前的博文曾阐述过使用ES5实现JavaScript数据结构-集合。...[1, 2, 3, "1"] 注意:向Set加入值的时候,不会发生类型转换,所以5和”5”是两个不同的值。...十、Iterator和for…of循环 ES6之前表示“集合”的数据结构,主要是数组和对象,ES6中新增了Map和Set。需要一种统一的接口机制来处理所有不同的数据结构。...Syntax: new Proxy(target, handler) target参数表示所要拦截的目标对象 handler参数也是一个对象,用来定制拦截行为 属性键(监听参数) 监听内容 has(target...这就让Proxy对象可以方便地调用对应的Reflect方法,完成默认行为,作为修改行为的基础。

    80831

    【愚公系列】《AIGC辅助软件开发》014-AI辅助前端编程:AI辅助前端应用开发

    这个对象位于 `baseHandlers.ts` 文件中,包含了 `get`、`set`、`has`、`deleteProperty` 等方法的处理逻辑。...- `baseHandlers`:一个对象,定义了代理对象的各种操作(如 `get`、`set` 等)的拦截逻辑。...这些处理器定义了响应式对象的行为,使得 Vue 能够高效地追踪数据的变化,并在需要时触发视图的更新。...通过以上两个搜索方法的案例可以看出,ChatGPT在搜索明确的JavaScript方法时,提供的答案具有较强的针对性,能够准确识别和检索与JavaScript方法相关的信息。...例如,如果我们希望 `add` 函数能够处理数字和字符串类型,可以分别处理不同类型的参数。 2.

    12210

    ES6之Reflect详解

    Reflect的出现主要是为了将一些Object对象上的方法转移到Reflect上,使得操作对象更加统一和易于理解。通过这种方式,实现了对Object上方法的封装和统一。...例如,我们可以使用Reflect.get()来获取一个属性值,而不需要再使用obj[key]这种方式。提供了默认行为:在某些情况下,我们可能需要自定义某个操作的行为。...通过使用Reflect对象上的方法,我们可以在自定义行为中调用默认行为,并且不需要再手动实现默认行为。...函数调用:通过使用Reflect.apply()方法,可以动态地调用一个函数,并传入指定参数。这对于实现函数调用的灵活性和可扩展性非常有帮助。5....通过使用Reflect对象上的方法,我们可以更加方便地操作对象,并且统一了操作对象的API。Reflect的出现使得操作对象更加简单和易于理解,同时也提供了自定义行为的能力。

    78241

    用简单的方法学习ECMAScript 6

    每次我们创建一个新的symbol,我们实际上是创建了一个新的独一无二的标识符,它不会与我们项目中其他任何变量名、属性名冲突。这就是为什么某些场景下它很有用的原因。例如,我们可以使用它定义一个常量。...在ES5中,我们以前会使用两个不同的对无二的字符串来定义常量。我们会不得不依赖于字符串!但众所周知,字符串并不具备唯一性。...我们可能在偶然的时机改变它,或在不同的地方输入它们,这些操作会使我们的常量的行为崩坏。...'c']; // 返回多个值 function testing() { return {element: undefined, index: -1}; } 默认值和展开运算符 ES6提供了一个新的更好的定义函数参数默认值的方式...疲劳的学习计划 推翻JavaScript中的三座大山:作用域篇 掌握Chrome开发工具:新一代前端开发技术 WEB前端性能优化常见方法 在 Vue 中创建自定义输入 干货:CSS 专业技巧 四步实现React

    1.8K41

    一文搞懂ES6的Map,Map和Object如何选择

    ", "val3"] ]); alert(m1.size) // 3 console.log(m1) console打印出的m1如下: 使用自定义迭代器初始化映射 // 使用自定义迭代器初始化映射...如下: set()、 get()、has()、delete()、clear() 初始化之后,可以使用 set()方法再添加键/值对。...set()方法再添加键/值对 get()获取 Map 对象中键的值 has()进行查询 delete()删除一个键/值对 clear()清除这个映射实例中的所有键/值对 const m = new Map....set("key3", "val3"); alert(m.size); // 3 与 Object 只能使用数值、字符串或符号作为键不同,Map 可以使用任何 JavaScript 数据类型作为 键...,则可以调用映射的 forEach(callback, opt_thisArg) 方法并传入回调,依次迭代每个键/值对。

    1K20
    领券