为什么replace方法回调函数中JSON不能用点语法调用?

发布于 09-04 12:32 字数 702 浏览 20 评论 0

下面代码弹窗是{}部分是undefined

var str = "今天{tianqi}很好,我的{xinqing}很糟,因为明天是{qingren}节!";
     var dictionary = {
        "tianqi":"天气",
        "xingqing":"心情",
        "qingren":"情人"
     }
     str = str.replace(/{(\w+)}/g,function(match,$1){
        console.log($1);
        return dictionary.$1;
     });
     alert(str);

但用中括号是可以的:

     var str = "今天{tianqi}很好,我的{xinqing}很糟,因为明天是{qingren}节!";
     var dictionary = {
        "tianqi":"天气",
        "xingqing":"心情",
        "qingren":"情人"
     }
     str = str.replace(/{(\w+)}/g,function(match,$1){
        console.log($1);
        return dictionary[$1];
     });
     alert(str);

为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

温柔嚣张2022-09-11 12:32:57
> var a = {A: "test", B: "what"}
undefined
> var A = 'B'
undefined
> a.A
'test'
> a[A]
'what'

a.A => a['A'] (这里A是字符串)

删除会话2022-09-11 12:32:57

如果你用点“.”访问,访问的属性是dictionary.$1,即$1为字符串,而当以[]访问时,是将$1内存的值作为变量的属性~

2022-09-11 12:32:57

[]表示法在存取属性值时会进行表达式运行。
.表示法是直接存取属性值。

冷心人i2022-09-11 12:32:57

$1是变量,dictionary.$1中,$1是字符串

西瓜2022-09-11 12:32:57

理解 dictionary.$1 = dictionary['$1'] 就可以了,这里左边的 $1. 属性访问符的“操作数”,而不是一个变量。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文