Javascript中.和[]获取属性的区别

function _showLinkEle(type){
    var action = {
        0: function(){     // 声音+图片
            
        },
        1: function(){     // 声音+文字

        },
        2: function(){     // 视频

        },
        3: function(){     // 课程链接

        },
        "": function(){
            return;
        },
    };
}
console.log(action.type);  //undefined
console.log(action[type]); //可读取到值

内部javascript是什么机制导致的?

阅读 4k
6 个回答

.可以快捷访问符合变量命名规则的key
[ ]可以访问任意key,即使key不符合变量命名规则

obj={
    1:'a',
    'b':12,
    '>9':'x'
}
Object {1: "a", b: 12, >9: "x"}
obj.b
12
obj.>9 //不符合变量命名规则
SyntaxError: Unexpected token >
obj['>9']
"x"
obj.1 //不符合变量命名规则
SyntaxError: Unexpected number
obj[1]
"a"
obj['1']
"a"
obj['b']
12

. 后边跟的是字面量,不是表达式,如果要使用表达式,就只能用 []

var arr = [ 0, 1, 2 ];

arr.length; // . 后直接跟 length,即表明取的是这个对象的 length 属性

var index = 1;
arr[index]; // [] 里可以放一个表达式,这里是变量 index,值为 1
arr[index + 1]; // 这里是表达式 index + 1,值为 2

没看懂这个函数,我觉得问题可能在于你的type是个数字,所以不能用点号查询

[]里面的是字符串

1、对象的属性名为【数字】时,只能使用[]访问,数字名称本身相当于index下标赋值

obj={0:100}
//相当于
var obj={};
obj[0]=100;

2、放对象的属性名为【变量】时,只能用[]访问,用"."没用

    var myName = "特朗普";
    var hisName = "希拉里";

    var obj = {};
    obj[myName] = hisName; //myName是个变量
    console.log(obj.myName);//无法取到变量作为属性名称: undefined
    console.log(obj[myName]);//可以取到变量为属性名称: 希拉里

你可以认为.是对象调用自己的成员变量,显然你的代码中的0,1,2,3这些数字是不符合变量的命名规则的,但这些数字作为数组[]里的键却是合法的.

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