当前位置: 首页 > news >正文

JS对象键的秘密:数字变字符串?

在 JavaScript 中,对象的键(key)可以是数字,但需要注意以下关键规则:

1. 数字键会被自动转换为字符串

const obj = {42: "Answer to Everything"
};console.log(obj[42]);    // ✅ 输出 "Answer to Everything"
console.log(obj["42"]);  // ✅ 同样输出 "Answer to Everything"(数字键被转为字符串)

2. 数字键在对象中的表现

  • 数字键在 for...in 循环中会按升序排列(优先于字符串键):
    const obj = {"b": "String B",10: "Number 10","a": "String A",2: "Number 2"
    };for (const key in obj) {console.log(key); // 输出顺序:2 → 10 → b → a
    }
    
  • 通过 Object.keys() 获取键时,数字键也会转为字符串:
    console.log(Object.keys(obj)); // 输出: ["2", "10", "b", "a"]
    

3. 数字键的限制

  • 不能使用点语法.):
    console.log(obj.42); //  ❌ 语法错误(点语法只接受字符串标识符)
    
  • 负数/小数需用方括号(但仍转为字符串):
    obj[-1] = "Negative";
    obj[3.14] = "Pi";console.log(obj["-1"]); // ✅ 输出 "Negative"
    console.log(obj["3.14"]); // ✅ 输出 "Pi"
    

4. 何时使用其他数据结构?

  • 如果需要保留键的原始数据类型(如数字),改用 Map
    const map = new Map();
    map.set(42, "Answer");
    map.set("42", "Different Answer");console.log(map.get(42)); // "Answer"(数字类型键)
    console.log(map.get("42")); // "Different Answer"(字符串类型键)
    
  • 如果需要严格顺序混合类型键Map 是更优选择。

总结

特性对象(Object)Map
键类型数字键自动转字符串支持任意类型(包括数字)
访问数字键obj[42](方括号)map.get(42)
保留键的原始类型❌(数字变字符串)
遍历顺序数字键升序优先插入顺序

结论:JavaScript 对象的键支持数字,但会被隐式转为字符串。若需严格数字键或复杂键类型,使用 Map

http://www.lryc.cn/news/598659.html

相关文章:

  • 【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
  • 应急响应】Linux 自用应急响应工具发版 v6.0(LinuxGun)
  • redis 源码阅读
  • 完整指南:使用Apache htpasswd为Chronograf配置基础认证及功能详解
  • AWS S3 生命周期管理最佳实践:IoT Core 日志的智能存储优化
  • 【水文水资源] SWAT、AquaCrop模型、HYPE、Aquatox、Delft3D、FVCOM、3s水文、
  • 数据推荐丨海天瑞声7月数据集上新啦!
  • 用python自动标注word试题选项注意事项
  • 基于k2-icefall实践Matcha-TTS中文模型训练2
  • 机器学习概述与 KNN 算法详解
  • 湖北大数据集团赴OpenCSG三峡传神社区调研指导
  • 虚拟电厂——解读69页 2024虚拟电厂售电业务及共享储能等新型业态趋势【附全文阅读】
  • YOLO11有效涨点优化:注意力魔改 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测
  • 深入解析文件操作(下)- 文件的(顺序/随机)读写,文件缓冲区,更新文件
  • 模块化商城的快速部署之道:ZKmall开源商城如何让电商功能即插即用
  • 前端安全问题怎么解决
  • 常用设计模式系列(十一)—外观模式
  • C++ 中打开文件的多种方式及相关流类
  • 三维手眼标定
  • Windows下使用UIAutomation技术遍历桌面窗口和指定窗口内容的AutomationWalker.exe的C#源代码
  • Java中的静态变量是在“堆“还是“方法区“?
  • 视频模型国产PK国外?
  • Leetcode—1035. 不相交的线【中等】
  • TDengine 转化类函数 CAST 用户手册
  • Windows 11下纯软件模拟虚拟机的设备模拟与虚拟化(仅终端和网络)
  • C++性能优化实战‘从毫秒到微秒的底层突围‘
  • Windows 10 停服:个人与企业的 “系统选择题”
  • MNIST 手写数字识别模型分析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——4. 前后端联动:打通QML与C++的任督二脉
  • LAYOUT 什么时候需要等长布线?