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

为什么Object.keys(数组)以字符串形式返回索引,而keys(数组)以数字形式返回索引?

Object.keys(数组)以字符串形式返回索引,而keys(数组)以数字形式返回索引的原因是因为它们是不同的方法,分别用于不同的数据类型。

Object.keys()是JavaScript的内置方法,它用于返回一个给定对象的所有可枚举属性的字符串数组。当我们将一个数组作为参数传递给Object.keys()时,它会将数组的索引作为属性名来处理,因为在JavaScript中,数组的索引实际上是以字符串形式表示的。这是由于JavaScript中的对象属性名都是字符串类型。

示例代码如下:

代码语言:txt
复制
const arr = ['a', 'b', 'c'];
console.log(Object.keys(arr));  // ['0', '1', '2']

在这个例子中,Object.keys(arr)返回的是一个包含字符串"0"、"1"和"2"的数组,分别对应数组arr中的索引位置。

另一方面,keys(数组)并不是JavaScript的内置方法,而是可能是您自己定义的一个函数或方法。根据您提供的问题描述,这个函数可能是用于返回给定数组的索引的数字形式,而不是字符串形式。这是因为您在定义函数时可能选择了以数字形式表示索引,而不是字符串形式。

示例代码如下:

代码语言:txt
复制
function keys(arr) {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    result.push(i);
  }
  return result;
}

const arr = ['a', 'b', 'c'];
console.log(keys(arr));  // [0, 1, 2]

在这个示例中,keys(arr)返回的是一个包含数字0、1和2的数组,分别对应数组arr中的索引位置。

总结起来,Object.keys(数组)以字符串形式返回索引是因为它是JavaScript的内置方法,用于返回对象的可枚举属性,而在JavaScript中,对象的属性名都是字符串。而keys(数组)以数字形式返回索引是根据您自己定义的函数或方法,可能是出于特定的需求或设计考虑。

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

相关·内容

分享一些常用的 JS 基础面试题

(str.match(reg)) // 输出符合匹配规则的内容,数组形式返回 ['2018', '2019', '2020'] console.log(str.match('20')) // 不使用正则...如果找到匹配,则 match方法会把匹配到数组形式返回,如果正则规则未设置全局修饰符g,则 match方法返回数组有两个特性:input和index。input属性包含整个被搜索的字符串。...遍历对象的属性 Object.keys方法的参数是一个对象,返回一个数组。...() 遍历对象的属性 Object.getOwnPropertyNames方法与Object.keys类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。...但Object.keys不能返回不可枚举的属性;Object.getOwnPropertyNames能返回不可枚举的属性。

70920
  • ES6的语法

    ,不能修改元素的值类型 //Object.keys(obj)返回一个数组,由obj的所有属性或者obj的所有索引 //深拷贝: function freezeAll(obj){ var ora=...[]:{}; Object.freeze(obj); //Object.keys(obj)返回一个数组,由obj的所有属性或者obj的所有索引 Object.keys(obj).forEach...(obj)返回一个数组,由obj的所有属性或者obj的所有索引 Object.keys(obj).forEach(function(item){ if(typeof obj[item]=="object...num是否s解束 str.repeat(n)重复次数,生成新字符串n不是数字会被转成数字,n<=-1报错;-1<n<0,n=NAN解果都为0 str.padStart(n,"xyz")从前面补全字符串...(非继承的属性)的描述对象 enumerable为false,则不可被for in遍历 自身的和继承的 for..in循环:只遍历对象自身的和继承的可枚举属性 Object.keys():返回数组

    10610

    JS学习笔记 (四) 数组进阶

    1、基本知识 1、数组是值的有序集合。每个值叫做一个元素,每个元素在数组中的位置称为索引数字表示,0开始。 2、数组是无类型的。...5、JavaScript数组是JavaScript对象的特殊形式数组索引可以认为是整数的属性名。 6、数组继承自Array.prototype中的属性。...遍历数组的元素值 Object.keys 返回数组索引(即键名)组成的数组 Object.value 返回数组的元素值组成的数组 举个例子: let arr = ["Chinese","Math",...返回找到的第一个元素的索引,如果没有找到就返回-1 lastIndexOf() 搜索某个指定的字符串值在字符串中最后一次出现的位置,从后向前查找。...keys( ) 返回键名的遍历器对象 values( ) 返回键值的遍历器对象 includes( ) 判断数组中是否包含给定的值,与字符串的includes方法类似。

    28110

    JavaScript 10分钟入门

    因此在还不支持它的浏览器中,为确保一个数字值是一个整数,或者一个数字字符串被转换为一个整数,就必须使用parseInt函数。类似地,包含小数的字符串可用与parseFloat方法转换。...空字符串数字0,以及undefined和null,会被转换为false,其他所有值会转换为true。 通常我们需要使用全等符号符号(===和!==)不是==和!=。...否则,数字2是等于的字符串“2”的, (2 == “2″) is true VAR= [] 和var a = new Array() 都可以定义一个空数组。...正常的类 数组 可以用一个JavaScript数组文本进行初始化变量: var a = [1,2,3]; 因为它们是数组列表,JS数组可动态增长:我们可以使用比数组的长度更大的索引。...horse": "mein Pferd" } 通过Object.keys(m)可以获得map中所有的键: var i=0, key="", keys=[]; keys = Object.keys( myTranslation

    1.3K100

    一行 Object.keys() 引发的血案

    根据 ECMAScript 规范[4],在输出 keys 时会先将所有 key 为数组索引类型(正整数)从小到大的顺序排序,然后将所有字符串类型(包括负数、浮点数)的 key 按照实际创建的顺序来排序。...的确通过搜索引擎可以很快就能知道 Object.keys() 的返回顺序是怎样的,但是很多都只流于表面,甚至我还见过这样片面的回答:数字排前面,字符串排后面。...我们先来看看在 MDN[6] 上关于 Object.keys() 的描述: Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致...到这里,我们已经知道我们想要的答案,这里总结一下: 创建一个空的列表用于存放 keys 将所有合法的数组索引按升序的顺序存入 将所有字符串类型索引按属性创建时间升序的顺序存入 将所有 Symbol 类型索引按属性创建时间升序的顺序存入...返回 keys 这里顺便也纠正一个普遍的误区:有些回答说将所有属性为数字类型的 key 从小到大排序,其实不然,还必须要符合 「合法的数组索引」 ,也即只有正整数才行,负数或者浮点数,一律当做字符串处理

    73920

    Javscript数组快速填充数据的8种方

    fill() fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。...Array.from({length:10},(item,index)=>index) map() 一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个 for...of 循环在每次迭代后会返回一个形式为...(7) 创建一个具有单个元素 7 的数组 Array(7) 创建一个长度为7的空数组(注意:这是指一个有7个空位(empty)的数组不是由7个undefined组成的数组)。...() Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。..., 9 ] 创建值为String的数组 let arr = Object.keys([...Array(10)]); //[ "0", "1", "2", "3", "4", "5", "6", "7

    78720

    ES6之Reflect和Proxy

    (钩子函数Hook) 反射APIReflect对象的形式出现,对象中方法的默认特性与相同的底层操作一致,代理可以覆写这些操作,每个代理陷阱对应一个命名和参数都相同的Reflect方法。...关于Proxy和Object.defineProperty()对于数组的劫持 以及对于Vue为什么不可以实现数组的数据响应式劫持解释 无论是Object.defineProperty()还是new Proxy...()对于数组的代理,数字的原本方法比如push(), pop(), shift()等这些方法是可以不被拦截的,所以这也就Vue底层对于数组的监听在原型上重写了这些方法(变异方法,做到数据响应式)。...(虽然Vue不支持对于数组下标形式的修改,但是这两种方式显然是支持数组下标的拦截的。) 为什么不用数组的拦截并不是不支持而是->参见github上尤大的回答。...陷阱唯一接收的参数事操作的目标,返回值必须是一个数组或者类数组对象,否则就会抛出错误。

    37020

    重学ES6之代理Proxy和反射Reflect

    (钩子函数Hook) 反射APIRefelect对象的形式出现,对象中方法的默认特性与相同的底层操作一致,代理可以覆写这些操作,每个代理陷阱对应一个命名和参数都相同的Refelect方法。...(虽然Vue不支持对于数组下标形式的修改,但是这两种方式是支持数组下标的拦截的。) 为什么不用数组的拦截并不是不支持而是->参见github上尤大的回答。 !...陷阱唯一接收的参数事操作的目标,返回值必须是一个数组或者类数组对象,否则就会抛出错误。...当调用Object.keys(),Object.getOwnPropertyNames(),Object.getOwnPropertySymbols()或者Object.assign()以及for in...然后将过滤后的数组元素添加到proxy的方法返回上 user = new Proxy(userInfo,{ ownKeys(target) { // 返回不以_开头的属性数组

    44930

    如果再写 for 循环,我就锤自己!

    i = 0, keys=Object.keys(profile); i < keys.length;i++){ console.log(keys[i]) // 对象的键值 console.log...//遍历对象 let profile = {name:"April",nickname:"二十七刻",country:"China"}; let keys = Object.keys(profile...定义一个变量i(数字类型,表示数组的下标),按照一定的条件,对i进行循环累加。条件通常为循环对象的长度,当超过长度就停止循环。因为对象无法判断长度,所以搭配Object.keys()使用。...遍历数组时把数组的下标当作键值,此时的i是个字符串型的。它是为遍历对象属性构建的,不建议与数组一起使用。 for...of ES6 提出。只遍历可迭代对象的数据。...此时建议使用 forEach 对于纯对象的遍历,选择for..in枚举更方便;对于数组遍历,如果不需要知道索引for..of迭代更合适,因为还可以中断;如果需要知道索引,则forEach()更合适;对于其他字符串

    46550

    【源码共读】Vue2工具函数

    3.3 toNumber 转换成数字型,如果没法转换成数字型就返回字符串。该方法参数只能是字符串类型。...val : n} 注意,由于parseFloat只要参数字符串的第一个字符能被解析成数字,就会返回数字,即使后面不是数字也一样,如上面例子的123a。...简单讲一下步骤: Object.create(null)生成没有原型链的空对象 str.split(',')把字符串,为分隔符,将字符串分割为字符串数组 遍历分割的数组字符串为key,...|| []) }, []).join(',')} 接收一个对象数组,将staticKeys的值(数组),拼接成静态键的数组,最后将该数组转化成字符串形式,用,连接。...isArrayB) { const keysA = Object.keys(a) const keysB = Object.keys(b) return keysA.length

    81830

    《学习JavaScript数据结构与算法》-- 5.字典和散列表(笔记)

    字典和集合很相似,集合[值, 值]的形式存储元素,字典则是以[键, 值]的形式来存储元素。字典也称作映射、符号表或关联数组。 在计算机科学中,字典经常用来保存对象的引用地址。...delete this.table[this.toStrFn(key)]; return true; } return false; } 5.1.6 将字典所包含的所有数值数组形式返回...values() { return this.keyValues().map(valuePair => valuePair.value); } 5.1.7 将字典所包含的所有键名数组形式返回...散列函数的作用是给定一个键值,然后返回值在表中的地址。 散列表有一些在计算机科学中应用的例子。因为它是字典的一种实现,所以可以用作关联数组。它也可以用来对数据库进行索引。...方法都返回Iterator,不是值或键构成的数组

    77800

    for 循环的 5 种写法,哪种最快?

    i = 0, keys=Object.keys(profile); i < keys.length;i++){ console.log(keys[i]) // 对象的键值 console.log...//遍历对象 let profile = {name:"April",nickname:"二十七刻",country:"China"}; let keys = Object.keys(profile...定义一个变量i(数字类型,表示数组的下标),按照一定的条件,对i进行循环累加。条件通常为循环对象的长度,当超过长度就停止循环。因为对象无法判断长度,所以搭配Object.keys()使用。...遍历数组时把数组的下标当作键值,此时的i是个字符串型的。它是为遍历对象属性构建的,不建议与数组一起使用。 for...of ES6 提出。只遍历可迭代对象的数据。...此时建议使用 forEach 对于纯对象的遍历,选择for..in枚举更方便;对于数组遍历,如果不需要知道索引for..of迭代更合适,因为还可以中断;如果需要知道索引,则forEach()更合适;对于其他字符串

    92620

    通过几个事例,就可以说明 for...of 循环在 JS 是不可或缺

    数组的迭代 for...of的最常见应用是对数组项进行迭代。 该循环可以很好且短暂地完成它,而无需其他变量来保持索引。...数组方法 entries() 可以用于访问迭代项的索引,该方法在每次迭代时返回一组键值对[index, item]。...键可以是任何基本类型(通常是字符串,但也可以是数字等) 幸运的是,Map也是可迭代的(在键/值对上进行迭代),所以使用for...of可以轻松地在所有键/值对上循环遍历。...通常,我要先使用Object.keys()提取对象键,然后使用forEach()来遍历键数组: const person = { name: '前端小智', job: '前端分享者' } Object.keys...因为HTMLCollection是一个类似数组的对象(不是一个常规数组),所以我们不能使用常规数组方法。 例如,每个 DOM 元素的children属性都是HTMLCollection。

    1.1K50
    领券