首页 > 其他分享 >for-in与for-of有什么区别?

for-in与for-of有什么区别?

时间:2024-12-30 09:10:02浏览次数:1  
标签:遍历 区别 对象 什么 链上 枚举 原型 属性

在前端开发中,for-infor-of 是两种不同的循环结构,它们各自有特定的用途和区别。以下是它们之间的主要区别:

  1. 迭代对象不同

    • for-in:主要用于遍历对象的可枚举属性(包括其原型链上的属性,除非对象自身和原型链的某个属性都是不可枚举的),其基本语法是 for (variable in object) {statement}。这里的 variable 会依次被赋值为 object 对象的可枚举属性名。
    • for-of:主要用于遍历可迭代对象(如 Array,Map,Set,String,TypedArray,arguments对象等等),其基本语法是 for (variable of iterable) {statement}。这里的 variable 会依次被赋值为 iterable 可迭代对象的每个元素的值。
  2. 属性枚举与值获取

    • for-in 循环返回的是对象的属性名(key),如果需要对属性值进行操作,还需要通过对象[属性名]的方式来获取。
    • for-of 循环则直接返回的是每一项的值(value),无需额外操作即可直接对值进行处理。
  3. 原型链属性

    • for-in 会枚举出对象自身的以及原型链上的所有可枚举属性(除非显式地使用 hasOwnProperty 方法进行过滤)。
    • for-of 则只关注对象自身的可迭代元素,不会涉及原型链。
  4. 性能考虑

    • 在处理大量数据时,for-of 通常比 for-in 更快,因为它不会遍历原型链上的属性,减少了不必要的操作。
    • 如果明确知道要遍历的是对象的属性名而不是值,或者需要操作原型链上的属性,那么使用 for-in 会更合适。
  5. 使用场景

    • 当你需要遍历一个对象的所有可枚举属性时(包括原型链上的),使用 for-in
    • 当你需要遍历一个数组、字符串、Map、Set 或其他可迭代对象并直接操作它们的元素值时,使用 for-of

总的来说,for-infor-of 在前端开发中各自扮演着不同的角色,选择使用哪一种主要取决于你的具体需求和操作的对象类型。

标签:遍历,区别,对象,什么,链上,枚举,原型,属性
From: https://www.cnblogs.com/ai888/p/18640020

相关文章

  • 前端的token存在哪里?有什么区别吗?
    在前端开发中,token通常可以存放在以下几个位置:localStorage:优点:生命周期永久,除非用户显式在浏览器UI上清除,否则信息将一直存在。缺点:同一属性名的数据会被替换,且不同浏览器间无法共享信息。另外,如果存储敏感信息,可能会存在安全风险,因为用户或其他恶意脚本可能通过浏览器的开......
  • 请解释js中的任务队列是什么?
    在JavaScript和前端开发领域,任务队列(TaskQueue)通常与事件循环(EventLoop)和异步编程紧密相关。为了理解任务队列,我们首先需要了解JavaScript的执行环境和事件循环的基本概念。1.单线程环境JavaScript最初被设计为在单线程环境中运行,这意味着它一次只能执行一个任务。这种......
  • AI Agent系列-什么是AI智能体,使用Semantic Kernel开发一个AI Agent
    今年最热的技术除了LLM大语言模型外,AIAgent智能体成为下一个最热的技术发展热点。、近期准备整理几篇AI智能体的博客,带着大家了解并学习AI智能体的开发和应用。一、什么是AI智能体AI智能体(AIAgent)是指一个由人工智能驱动的系统或程序,能够在一定的环境中自主感知、决策和执......
  • 什么情况下会放弃索引,直接进行全表扫描查询?
    索引选择性低索引选择性:选择性是指索引列中不同值的数量与总行数的比率。选择性高的索引(即索引列中的值分布较广)通常更有效。全表扫描更高效:如果索引列的选择性很低(即大多数行具有相同或相似的值),全表扫描可能比使用该索引更高效。查询条件不适用索引查询条件复杂:某些查......
  • webworker 和wasm对前端性能优化,使用场景有何区别?
    WebWorker和WebAssembly(Wasm)是两种不同的技术,它们在前端性能优化中扮演着不同的角色,并适用于不同类型的使用场景。下面我们将详细比较这两种技术的区别以及它们各自的适用场景。WebWorker性能优化特点并发处理:WebWorker允许你在后台线程中运行JavaScript代码,从而......
  • RL中on-policy和off-policy的本质区别/重要性采样
    本随笔的图片都来自UCL强化学习课程lec5Model-freeprediction的ppt(Teaching-DavidSilver).回忆值函数的表达式:\[v_\pi(s)=\mathbbE_\pi[G_t\midS_t=s]\]其中\(G_t\)是折扣回报。期望\(\mathbbE\)下面的\(\pi\)是简写,实际上应该写作:\[A_t,S_{t+1},A_{t+1}\cdots,S_......
  • “图灵机”,究竟是什么?
    前言想必大部分人理工科专业的大学生都在计算机这门课上听说过“图灵机”这个概念。那么,不知有没有人想过它为什么是计算机学科里必学的一个概念呢?这其实并不难理解,只要你稍微了解一下它的成就和背景,就会对此坚定不移了。1.首先,我们要明白,图灵机是计算机科学的基础概念,它......
  • where 和 on的区别
      select a.id,a.salary ,b.id,b.salaryfrom aleftjoinbona.id=b.id     --  and  b.salary!= 200 ; --16swhere      b.salary!= 200 ;   主表中的条件要放到where条件中, 附表中的条件放到on条件中. 附表......
  • Rust中以下三个东西是什么?有什么用? #[automatically_derived] #[allow(clippy::ptr_ar
    Rust中以下三个东西是什么?有什么用?#[automatically_derived]#[allow(clippy::ptr_arg)]#[rustfmt::skip]gpttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt在Rust中,以下三个属性分别有不同的用途:1.#[automatically_derived]作用:这个属性表示该代码是由......
  • java面试篇-1.一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?
    在一个 .java 源文件中可以包含多个类(不是内部类),但有一些限制:公共类(publicclass):一个 .java 文件中只能有一个公共类。公共类的名称必须与文件名相同。例如,如果文件名为 MyClass.java,那么公共类的名称也必须是 MyClass。非公共类(non-publicclass):一个 .java 文件......