<分区>
今天我在 Javascript 中遇到了一件奇怪的事情。 如果我在 Chrome 控制台中执行:
> 1["foo"]
Chrome 控制台返回:
undefined
虽然我期待一个错误。这怎么可能?我通过研究似乎使用该 JavaScript 属性的 underscore.js(旧版本)invoke
方法来解决这个问题:
// Invoke a method (with arguments) on every item in a collection.
_.invoke = function(obj, method) {
var args = slice.call(arguments, 2);
var isFunc = _.isFunction(method);
return _.map(obj, function(value) {
var func = isFunc ? method : value[method];
return func == null ? func : func.apply(value, args);
});
};
如您所见,value
可以是一个数字,如果 1["foo"]
引发错误,该代码将不安全,因为我可以这样做错误跟随:
var a = {'foo' : 1}
_.invoke(a, 'foo'}