为什么1 [“ foo”]返回undefined而不是错误?

时间:2018-08-08 18:01:36

标签: javascript

今天,我遇到了Java语言中的一件奇怪的事情。 在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'}

1 个答案:

答案 0 :(得分:4)

所有内容,甚至是基元,本质上都是对象,可以具有成员(属性,方法等)。有问题的代码正在尝试在1上找到名称为foo的成员,但找不到该成员,因此返回了undefined