You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RegExp测试变量返回布尔值,数组存入变量名而非布尔值问题

问题描述

我想要一个存储布尔值的数组,但实际得到的是变量名称。以下是简化示例:

声明匹配变量(返回布尔结果)

var usatest = new RegExp("USA").test(continent);  // 返回true
var canadatest = new RegExp("Canada").test(continent); // 返回false
var mexicotest = new RegExp("Mexico").test(continent); // 返回false

通过字符串分割创建数组

var testArray = 'usatest,canadatest,mexicotest'.split(",");

此时testArray为['usatest','canadatest','mexicotest'],但期望得到[ true, false, false ]

手动赋值的正确方式

var testArray1 = [{}];
testArray1[0] = usatest; 
testArray1[1] = canadatest;
testArray1[2] = mexicotest;

结果为正确的数组[ true , false, false]。

尝试批量赋值的错误方式

var testArray2 = [{}];
testArray2[0] = usatest;
testArray2[1] = testArray[1];
testArray2[2] = testArray[2];

期望得到[ true, false, false],但实际得到[true , 'canadatest', 'mexicotest']

疑问

为何使用testArray[1]赋值返回变量名而非布尔值?testArray也无法返回布尔值的原因是什么?我忽略了什么?


问题解答

核心原因很直白:你混淆了「变量名的字符串」和「变量本身存储的值」。

  1. 字符串分割得到的testArray里,每个元素都是字符串形式的变量名(比如"canadatest"),不是指向对应变量的引用。直接用testArray[1],取到的就是这个字符串,自然不会变成布尔值。
  2. 手动赋值时testArray1[1] = canadatest,你是直接把变量canadatest存储的布尔值赋值给数组元素,这才是正确的「取变量值」操作。

如果想批量处理长列表的变量值,推荐两种靠谱的方式:

  • 全局变量场景:如果这些变量是全局作用域的,可以通过window[变量名字符串]取值,比如window[testArray[1]]就能拿到canadatest的布尔值。
  • 局部变量场景:一开始就把测试结果存入对象,通过键名来批量取值,示例代码:
// 把所有测试结果存入对象
var testResults = {
  usatest: new RegExp("USA").test(continent),
  canadatest: new RegExp("Canada").test(continent),
  mexicotest: new RegExp("Mexico").test(continent)
};
// 用map方法通过键名数组批量获取值
var testArray = ['usatest','canadatest','mexicotest'].map(key => testResults[key]);
// 此时testArray就是[true, false, false]

这种方式不管变量列表多长,都能轻松批量处理,不用一个个手动赋值。


内容的提问来源于stack exchange,提问作者Doc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:22:45