Javascript 为什么1[“foo”返回未定义而不是错误?

Javascript 为什么1[“foo”返回未定义而不是错误?,javascript,Javascript,今天我遇到了一件用Javascript编写的奇怪事情。 在Chrome控制台中执行时: > 1["foo"] Chrome控制台返回: undefined 不过我以为会有错误。怎么可能呢?我通过研究Underline.js(一个旧版本)invoke方法(该方法似乎使用JavaScript属性)得出了这个结论: // Invoke a method (with arguments) on every item in a collection. _.invoke = functio

今天我遇到了一件用Javascript编写的奇怪事情。 在Chrome控制台中执行时:

> 1["foo"] 
Chrome控制台返回:

undefined
不过我以为会有错误。怎么可能呢?我通过研究Underline.js(一个旧版本)
invoke
方法(该方法似乎使用JavaScript属性)得出了这个结论:

 // 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
上找到名为
foo
的成员,但未找到该成员,因此返回
未定义的

“今天我遇到了Javascript中的一件奇怪的事情。”。。这种情况每天都发生在我身上,哈哈,但这比平常更奇怪:你正在使用“括号符号”试图访问
1
对象上的
foo
属性。
1.foo.foo
将是一个错误。出于同样的原因
1['toString']
将返回
ƒtoString(){[native code]}
。所有js类型都是具有属性和方法的对象。