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

下面代码弹窗是{}部分是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);

为什么?

阅读 3.8k
5 个回答
> var a = {A: "test", B: "what"}
undefined
> var A = 'B'
undefined
> a.A
'test'
> a[A]
'what'

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题