JavaScript 中 for...in 与 with 语句的用法及注意事项

橘子海
橘子海
发布时间:2026-10-14| 6人浏览过
原创

for...in 用于遍历可枚举属性,而 with 语句可临时将对象设为默认作用域以简化调用,但需注意其与全局变量的冲突风险。

for...in 循环的作用与行为

在 JavaScript 中,for...in 是一种专门针对对象的迭代方式。它不会像 for 循环那样通过索引访问数组元素,而是逐次返回对象中的所有可枚举属性(包括继承自原型链的属性)。

在实际操作中,它通常用于获取对象的键名,随后通过该键名从原对象中取出对应的值。这一特性在处理动态结构的数据或轻量级数据展示时非常有用。

with 语句的语法与作用

with 语句的主要功能是创建一个临时的“默认对象”作用域。当进入 with 块后,块内所有未显式声明的变量引用都会优先在当前指定的对象中进行查找;如果找不到,才会继续向上查找至全局作用域。这种机制可以减少重复输入长对象名的代码量。

复制代码 代码如下:
with (对象) {
    // 在此处可以直接使用对象的属性和方法
}

实例:结合两者简化 DOM 操作与属性遍历

下面通过一个完整的脚本示例,演示如何使用自定义构造函数创建成员对象,利用 for...in 提取对象属性内容,并最终借助 with(document) 将这些信息输出到页面。

第1步:定义数据结构

首先构建一个简单的成员函数作为对象模板:

复制代码 代码如下:
function member(name, gender) {
    this.name = name;
    this.gender = gender;
}

第2步:编写属性格式化逻辑

定义辅助函数,利用 for(var i in obj) 循环将所有属性拼接为带有前缀的字符串:

复制代码 代码如下:
function showProperty(obj, objStr) {
    var str = "";
    for (var i in obj) {
        // 将属性名为 key 的值拼接为 prefix.key = value
str += objStr + "." + i + " = " + obj[i] + "<br>"; } return str; }

第3步:实例化并执行输出

创建对象实例,并通过 with(document) 直接调用内置的 write 方法将结果渲染至页面:

复制代码 代码如下:
<script type="text/javascript">
var obj = new member("刘若英", "女");
// 调用 showProperty 处理,并使用 document.write 输出
with(document) {
    write(showProperty(obj, "person"));
}
</script>

上述代码运行后,浏览器控制台下方会显示出如下的格式化文本信息:

  • person.name = 刘若英
  • person.gender = 女

性能提醒:慎用 with

尽管 with 看起来能精简代码,但它改变了作用域的解析规则,容易导致程序运行效率下降(因为解释器需要额外判断对象是否存在)。更重要的是,如果指定对象的属性名恰好与当前作用域中的局部变量同名,会产生歧义,从而引发隐蔽的 Bug。

在现代前端开发实践中,建议尽量采用展开运算符(Object.keys() 或 Object.assign)代替传统的 for...in 和 with 写法,以保证代码的安全性和可读性。

以上就是 for...in 以及 with 用法的详细内容,更多关于 JavaScript 基础的文章请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。