javascript - 为什么replace方法回调函数中JSON不能用点语法调用?
PHP中文网
PHP中文网 2017-04-11 11:55:09
[JavaScript讨论组]

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

为什么?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(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是字符串

ringa_lee

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号