javascript - 为什么 1 ["foo"] 返回未定义而不是错误?

标签 javascript

<分区>

今天我在 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'}

最佳答案

一切,甚至是原始对象,本质上都是对象,可以有成员(属性、方法等)。所有有问题的代码正在尝试在 1 上找到名为 foo 的成员,但未找到该成员,因此返回 undefined

关于javascript - 为什么 1 ["foo"] 返回未定义而不是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51752989/

相关文章:

javascript - 有没有办法增加material-ui中轮廓按钮的边框厚度?

javascript - jQuery UI 对话框显示不正确

javascript - jquery - 传递给 $().grep 的函数范围

java - 如何使用来自 JSP 页面的参数运行 java 类?

javascript - 在单个 Http 请求中打包多个 jQuery 模板的最佳方法?

javascript - 一种跨 AngularJS 指令共享通用模板 HTML 和 JavaScript 行为的方法?

javascript - 使用 angular.js 根据复选框单击将一个文本字段值分配给另一个文本字段值

JavaScript:两个浏览器的日期差异结果不同

javascript - 如何通过ajax获取多个文件并通过JavaScript将它们下载为zip文件?

javascript - 正则表达式匹配 "no spaces or no symbols"