首页
学习
活动
专区
工具
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

76421
  • 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参数写法。

    52420

    深入浅出 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() 方法验证是否在目标对象中定义了属性。

    43320

    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.3K41

    野生前端数据结构基础练习(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

    52430

    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

    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__ 字符串来储存。

    1K70

    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方法,完成默认行为,作为修改行为基础。

    80231

    Vue面试必须会Proxy

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

    30630

    ES6之Reflect详解

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

    75341

    用简单方法学习ECMAScript 6

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

    1.8K41

    一文搞懂ES6Map,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) 方法传入回调,依次迭代每个键/值对。

    88220

    JavaScript 权威指南第七版(GPT 重译)(四)

    然后,子类只需要通过实现超类定义但未实现抽象方法定义自己独特行为。...该示例定义了许多不同类,所有这些类都有一个名为has()方法。...由于模块必须以与传统非模块代码不同方式执行,它们引入需要对 HTML 和 JavaScript 进行更改。...Intl 对象及其定义类,可帮助您本地化 JavaScript 程序。 Console 对象,其方法以特别有用方式输出字符串,用于调试程序和记录程序行为。...这个标志不会改变匹配模式方式,但正如我们稍后将看到,它确实以重要方式改变了 String match()方法和 RegExp exec()方法行为。 i i标志指定匹配模式时应该忽略大小写。

    46110
    领券