JavaScript 运算符 in 详细说明与使用注意事项

JavaScript 中的运算 in 符一开始确实令人困惑,因为它的行为方式与大多数人期望的不同。虽然它看起来应该检查数组中是否存在值,但它实际上检查原型链中属性是否存在 - 而不是值本身。

in 是做什么用的?

in运算符 检查对象上是否存在属性,而不是数组中是否存在值。例如:

const arr = [1, 2, 3];
console.log(1 in arr); // false
console.log('length' in arr); // true

这里in在检查值时返回 false,1但在检查length所有数组都具有的属性时返回 true。

in 是如何运作的?

在幕后,in正在检查给定属性名称的原型链而不是数组的实际值。JavaScript 数组具有有用的方法,例如push()在其原型中定义的方法。

当我们in在数组上使用时,即使我们没有明确地将它们视为键,它也会为这些原型方法返回 true:

const methods = [];
console.log('push' in methods); // true

总而言之,通过检查对象的原型链in告诉我们哪些操作对对象有效,而不一定是它包含哪些值。

比较in 与 includes()

该includes()方法提供了一种更清晰的方法来检查数组中的值:

const fruits = ['apple', 'banana', 'orange'];

console.log(fruits.includes('apple')); // true
console.log(1 in fruits); // false

虽然includes()直接检查数组值,但in仅检查原型中的可用属性或方法。

in 使用常见的困惑

因为in其行为与 等方法不同includes(),所以它经常会让人绊倒。他们希望in像其他检查数组内容的函数一样工作,但它是为不同的目的而设计的 - 验证原型属性,而不是值。

何时使用 in

in最适合检查对象上是否存在属性或方法而不是其特定值。一些好的用途包括:

  • 访问前检查对象键

  • 调用前验证方法是否存在

  • 使用 for/in 循环迭代所有属性

它对于直接检查数组值并不理想。为此,请使用includes()、indexOf()等。

回顾和结论

总之,in 是JavaScript 中的运算符验证原型属性而不是对象值。虽然一开始令人困惑,但它具有有用的应用程序,例如属性存在检查。关键是通过检查原型链而不是直接检查对象来理解它的工作原理。有了这些知识,in尽管其行为不直观,但它是一个有用的操作符。

请注意,in和for..in是开放原型污染的常见陷阱:

const pollute = (obj, target, prop, value) => {
  if (target in obj) {
    obj[target][prop] = value
  }
}

pollute({}, '__proto__', 'foo', 'bar')
console.debug({}.foo) // 'bar'

许多 js 漏洞都围绕这个问题得到解决。
请谨慎使用并回退Object.hasOwnProperty.call或Object.hasProperty文章来源地址https://www.toymoban.com/diary/js/336.html

到此这篇关于JavaScript 运算符 in 详细说明与使用注意事项的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/js/336.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年10月03日 01:57
作为开发人员改善网站 SEO 的 10 个技巧
下一篇 2023年10月03日 02:23

相关文章

  • 【JavaScript】JavaScript 运算符 ④ ( 逻辑运算符 | 逻辑与运算符 && | 逻辑或运算符 || | 逻辑非运算符 ! )

    JavaScript 中的 逻辑运算符 的作用是 对 布尔值 进行运算 , 运算完成 后 的 返回值 也是 布尔值 ; 逻辑运算符 的 使用场景 : 条件控制语句 , 控制程序分支 ; 循环控制语句 , 控制程序循环 ; 逻辑 运算符 列举 : : 逻辑与运算 , 两个操作数都为 true , 最终结果才为 true , 只要有一个操

    2024年03月20日
    浏览(54)
  • 【JavaScript】JavaScript 运算符 ⑤ ( 赋值运算符 | 基础赋值运算符 与 复合赋值运算符 )

    JavaScript 赋值运算符种类 : 基础赋值运算符 : 等于 : = ; 复合赋值运算符 : 加等 : += 减等 : -= 乘等 : *= 除等 : /= 取模等 : %= 有符号左移等 : = 有符号右移等 : = 无符号左移等 : = 无符号右移等 : = 在 JavaScript 语言中 , \\\" 赋值运算符 \\\" 的 作用是 为 变量 分配值 ; 最基础的 \\\" 赋值运算

    2024年03月25日
    浏览(52)
  • JavaScript中一元运算符、三元运算符、循环

    前置自增: 后置自增: 区别 1.单独使用前置和后置没有区别。 2.前置自增:先自加再使用(记忆口诀:++在前,先加) 1.while循环 2.for循环 3.while循环和for循环区别 4.for循环嵌套 1.while循环 2.for循环 1.for循环执行代码 *作用:重复执行代码 *好处:把声明起始值、循环条件、变

    2024年02月04日
    浏览(45)
  • 重学Java 5 idea详细使用和运算符

    慢点跑,前面的路不好走                      ——24.1.14 1.概述:开发工具 2.特点:         a、idea是java写的,所以本地上必须有正确的jdk环境         b、idea自动保存         c、不用我们打开dos命令窗口执行javac和java命令         d、idea有强大的快捷键、生成代码、纠

    2024年02月01日
    浏览(90)
  • JavaScript =+运算符

    += 是 js 的加法运算,表达式 A += B 表示: A = A + B 。 如下: JavaScript 中 =+ 是一种特殊的赋值,表达式 A =+ B 表示:将 B 转化为数字赋值给 A 。 = 是赋值, + 代表后面的数字为正数;同理, =- 代表后面的数字为负数。 相当于告诉编译器,即将赋值的数值类型为数字类型,不要

    2024年02月12日
    浏览(54)
  • 【JavaScript】相等运算符(== 和 ===)

    如果x和y的类型相同,JavaScript会用equals 方法比较这两个值或对象。 没有出现在表格中的情况都会返回 false。(表格中的方法都是内部规定的) 对于 toNumber 方法: 对于 toPrimitive 方法: 第二行代码之所以为 false,就是因为 true 先转化为数 1,因此开始比较 \\\'aaa\\\' == 1 ;然后 ‘

    2024年02月07日
    浏览(55)
  • Javascript-中常用运算符

    目录 数据类型 常见运算 算术运算符 比较运算符 逻辑运算符 赋值运算符 自增/减运算符 三目运算符 位运算符 在 JS 中有以下两大类: 基本数据类型 数值类型(Number) 整数 (int) 浮点数(float) 布尔类型(Boolean),有两个值:true 和 false 字符串(String),它可以是单引号包

    2024年01月24日
    浏览(47)
  • JavaScript系列从入门到精通系列第九篇:JavaScript中赋值运算符和关系运算符以及Unicode编码介绍

    文章目录 一:赋值运算符 1:= 2:+= 3:-= 4:*= 5:/= 6:%= 二:关系运算符  1:数值类型关系运算 (一): (二):= (三): (四):= 2:其他类型关系运算 三:Unicode编码表         =右侧的值可以赋值给左侧的变量。         上边这两个写法是一样的。                 

    2024年02月08日
    浏览(60)
  • JavaScript系列之条件运算符

    条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。一个条件后面会跟一个问号 (?) ,如果条件为 true ,则问号后面的表达式 A 将会执行;表达式 A 后面跟着一个冒号 (:) ,如果条件为 false ,则冒号后面的表达式 B 将会执行。本运算符经常作为 if 语句的简

    2023年04月08日
    浏览(57)
  • JavaScript运算符及优先级

    一、算数运算符 算术运算符(+,-, * ,/,%【重要】,++【重要】,--) 其中 + 的左边和右边有 \\\" \\\", 表示拼接 i++,表示先赋值后+1     ++i ,表示先+1后赋值  同理减法也是如此 算数运算中,+ 可以进行隐式迭代,将字符串数字转化为Number类型 二、比较算数运算符 比较运算

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包